Open Search
    SqrMat3< V > Struct Template Reference

    #include <matrix.h>

    Detailed Description

    template<typename V>
    struct maxon::SqrMat3< V >

    General 3×3 matrix template consisting of three column vectors v1, v2, v3.

    Public Types

    using VectorStrideType = typename V::VectorStrideType
     
    using ValueType = typename V::ValueType
     
    using ValueTypeParam = typename ByValueParam< ValueType >::type
     
    using BoolType = typename V::BoolType
     

    Public Member Functions

    constexpr SqrMat3 ()
     
    constexpr SqrMat3 (const V &v1_in, const V &v2_in, const V &v3_in)
     
    template<typename V2 >
    constexpr SqrMat3 (const SqrMat3< V2 > &m)
     
    constexpr SqrMat3 (ENUM_DONT_INITIALIZE v)
     
    template<typename V2 >
    constexpr SqrMat3 (const SqrMat2< V2 > &m)
     
    void SetIdentity ()
     
    V & operator[] (Int idx)
     
    const V & operator[] (Int idx) const
     
    template<typename V2 >
    constexpr SqrMat3< typename MultiplicativePromotion< V, typename V2::ValueType >::typeoperator* (const SqrMat3< V2 > &m2) const
     
    template<typename T , Int S>
    constexpr Vec3< typename MultiplicativePromotion< ValueType, T >::type, 1 > operator* (const Vec3< T, S > &v) const
     
    constexpr SqrMat3 operator* (ValueTypeParam s) const
     
    constexpr SqrMat3 operator/ (ValueTypeParam s) const
     
    constexpr SqrMat3 operator+ (const SqrMat3 &m2) const
     
    constexpr SqrMat3 operator- (const SqrMat3 &m2) const
     
    constexpr BoolType operator== (const SqrMat3 &other) const
     
    constexpr BoolType operator!= (const SqrMat3 &other) const
     
    constexpr ValueType Det () const
     
    constexpr SqrMat3 operator~ () const
     
    constexpr void Normalize ()
     
    constexpr SqrMat3 GetNormalized () const
     
    constexpr SqrMat3 GetTransposed () const
     
    constexpr V GetScale () const
     
    constexpr SqrMat3 GetTensorMatrix () const
     
    constexpr SqrMat3operator*= (const V &v)
     
    constexpr SqrMat3operator*= (ValueTypeParam r)
     
    String ToString (const FormatStatement *formatStatement=nullptr) const
     
    constexpr MAXON_OPERATOR_HASH (SqrMat3, v1, v2, v3)
     

    Public Attributes

    v1
     
    v2
     
    v3
     

    Friends

    constexpr friend SqrMat3 operator* (ValueTypeParam s, const SqrMat3 &m)
     

    Member Typedef Documentation

    ◆ VectorStrideType

    using VectorStrideType = typename V::VectorStrideType

    ◆ ValueType

    using ValueType = typename V::ValueType

    ◆ ValueTypeParam

    ◆ BoolType

    using BoolType = typename V::BoolType

    The type returned by comparisons. If the template argument for V is a vector of SIMD components, this will be a SIMD type, too, which contains the per-element results.

    Constructor & Destructor Documentation

    ◆ SqrMat3() [1/5]

    constexpr SqrMat3 ( )
    constexpr

    Default constructor, creates an identity matrix.

    ◆ SqrMat3() [2/5]

    constexpr SqrMat3 ( const V &  v1_in,
    const V &  v2_in,
    const V &  v3_in 
    )
    constexpr

    Initializes matrix from individual components.

    ◆ SqrMat3() [3/5]

    constexpr SqrMat3 ( const SqrMat3< V2 > &  m)
    explicitconstexpr

    Initializes matrix from another matrix.

    ◆ SqrMat3() [4/5]

    constexpr SqrMat3 ( ENUM_DONT_INITIALIZE  v)
    explicitconstexpr

    Skips initialization of matrix (for better speed)

    ◆ SqrMat3() [5/5]

    constexpr SqrMat3 ( const SqrMat2< V2 > &  m)
    explicitconstexpr

    Initializes matrix from 2d matrix. v3 is assigned Cross(v1, v2).GetNormalized()

    Member Function Documentation

    ◆ SetIdentity()

    void SetIdentity ( )

    Sets this matrix to an identity matrix.

    ◆ operator[]() [1/2]

    V& operator[] ( Int  idx)

    Array (subscript) operator for index access to the matrix components.

    Parameters
    [in]idxElement index (if it's out of bounds you will get an error in debug code only, otherwise it will crash).
    Returns
    Matrix component.

    ◆ operator[]() [2/2]

    const V& operator[] ( Int  idx) const

    Array (subscript) operator for const index access to the matrix components.

    Parameters
    [in]idxElement index (if it's out of bounds you will get an error in debug code only, otherwise it will crash).
    Returns
    Matrix component.

    ◆ operator*() [1/3]

    constexpr SqrMat3<typename MultiplicativePromotion<V, typename V2::ValueType>::type> operator* ( const SqrMat3< V2 > &  m2) const
    constexpr

    Multiplies two matrices. The rule is m1 AFTER m2 If you transform a point with the result matrix this is identical to first transforming with m2 and then with m1

    ◆ operator*() [2/3]

    constexpr Vec3<typename MultiplicativePromotion<ValueType, T>::type, 1> operator* ( const Vec3< T, S > &  v) const
    constexpr

    Transforms a vector by a matrix.

    ◆ operator*() [3/3]

    constexpr SqrMat3 operator* ( ValueTypeParam  s) const
    constexpr

    Scales all matrix components by a scalar value.

    ◆ operator/()

    constexpr SqrMat3 operator/ ( ValueTypeParam  s) const
    constexpr

    Divides all matrix components by a scalar value. If s is 0.0 an identity matrix will be returned.

    ◆ operator+()

    constexpr SqrMat3 operator+ ( const SqrMat3< V > &  m2) const
    constexpr

    Adds two matrices component-wise.

    ◆ operator-()

    constexpr SqrMat3 operator- ( const SqrMat3< V > &  m2) const
    constexpr

    Subtracts two matrices component-wise.

    ◆ operator==()

    constexpr BoolType operator== ( const SqrMat3< V > &  other) const
    constexpr

    Equality operator.

    Parameters
    [in]otherComparison matrix.
    Returns
    True if this and other are equal, otherwise false.

    ◆ operator!=()

    constexpr BoolType operator!= ( const SqrMat3< V > &  other) const
    constexpr

    Inequality operator.

    Parameters
    [in]otherComparison matrix.
    Returns
    False if this and other are equal, otherwise true.

    ◆ Det()

    constexpr ValueType Det ( ) const
    constexpr

    Computes the determinant of this matrix.

    ◆ operator~()

    constexpr SqrMat3 operator~ ( ) const
    constexpr

    Calculates the inverse matrix If no inverse can be calculated the result is the Identity matrix

    ◆ Normalize()

    constexpr void Normalize ( )
    constexpr

    Normalizes the length of all three axes.

    ◆ GetNormalized()

    constexpr SqrMat3 GetNormalized ( ) const
    constexpr

    Returns this matrix with all axis vectors normalized.

    ◆ GetTransposed()

    constexpr SqrMat3 GetTransposed ( ) const
    constexpr

    Returns the transposed matrix.

    ◆ GetScale()

    constexpr V GetScale ( ) const
    constexpr

    ◆ GetTensorMatrix()

    constexpr SqrMat3 GetTensorMatrix ( ) const
    constexpr

    Calculates the tensor matrix which allows to transform normal vectors for non-orthogonal matrices. The tensor matrix T of a matrix M is given by T = inverse(transpose(M)) * det(M), and its computation is faster than that of the inverse transpose. To transform a normal with a normalized result, use the formula transformedNormal = !(matrix.GetTensorMatrix() * normal).

    ◆ operator*=() [1/2]

    constexpr SqrMat3& operator*= ( const V &  v)
    constexpr

    Scales each axis by the respective components of the passed vector.

    ◆ operator*=() [2/2]

    constexpr SqrMat3& operator*= ( ValueTypeParam  r)
    constexpr

    Scales each axis by the scalar.

    ◆ ToString()

    String ToString ( const FormatStatement formatStatement = nullptr) const

    Returns a readable string of the content.

    Parameters
    [in]formatStatementNullptr or additional formatting instruction. See also Formatting Floating point values.
    Returns
    The converted result.

    ◆ MAXON_OPERATOR_HASH()

    constexpr MAXON_OPERATOR_HASH ( SqrMat3< V >  ,
    v1  ,
    v2  ,
    v3   
    )
    constexpr

    Friends And Related Function Documentation

    ◆ operator*

    constexpr friend SqrMat3 operator* ( ValueTypeParam  s,
    const SqrMat3< V > &  m 
    )
    friend

    Scales all matrix components by a scalar value.

    Member Data Documentation

    ◆ v1

    V v1

    The X axis.

    ◆ v2

    V v2

    The Y axis.

    ◆ v3

    V v3

    The Z axis.