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.