Mat3< V > Struct Template Reference

#include <vector.h>

Detailed Description

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

Matrix.

matrix.png

The matrix has a dimension of 4×4 and consists of four rows and four columns. The first row is always "1, 0, 0, 0" and not stored in the class, which means that there are 12 actual numbers used. These numbers are grouped into four vectors, one for the remaining numbers in each column. The four vectors are called off, v1, v2 and v3, together these four vectors can be used to represent the coordinate system. A coordinate system consists of three axes, one for each coordinate (X, Y and Z). The system also has a base position, from which the three axes originate. This base position is stored in off, and the three axis vectors are stored in v1, v2 and v3 respectively. For a rectangular, normalized matrix v3 equals the cross product of v1 and v2 (v1v2). C4D by default uses a left-handed coordinate system (see define COORDINATESYSTEM_LEFT_HANDED).

Public Types

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

Public Member Functions

 Mat3 ()
 
 Mat3 (const V &off_in, const V &v1_in, const V &v2_in, const V &v3_in)
 
 Mat3 (const V &off_in, const SqMat3< V > &mat_in)
 
MAXON_IMPLICIT Mat3 (const SqMat3< V > &mat_in)
 
template<typename V2 >
 Mat3 (const Mat3< V2 > &m)
 
 Mat3 (ENUM_DONT_INITIALIZE v)
 
template<typename V2 >
 Mat3 (const Mat2< V2 > &m)
 
void SetIdentity ()
 
template<typename V2 >
Mat3< typename MultiplicativePromotion< V, typename V2::ValueType >::type > operator* (const Mat3< V2 > &m2) const
 
template<typename V2 >
Mat3< typename MultiplicativePromotion< V, typename V2::ValueType >::type > operator* (const SqMat3< V2 > &m2) const
 
template<typename T , Int S>
Vec3< typename MultiplicativePromotion< ValueType, T >::type, 1 > operator* (const Vec3< T, S > &v) const
 
Mat3 operator* (ValueTypeParam s) const
 
Mat3 operator/ (ValueTypeParam s) const
 
BoolType operator== (const Mat3 &other) const
 
BoolType operator!= (const Mat3 &other) const
 
Mat3 operator~ () const
 
Mat3 GetNormalized () const
 
String ToString (const FormatStatement *formatStatement) const
 
UInt GetHashCode () const
 

Static Public Member Functions

static const Mat3NullValue ()
 

Public Attributes

off
 
SqMat3< V > sqmat
 

Friends

Mat3 operator* (ValueTypeParam s, const Mat3 &m)
 

Member Typedef Documentation

◆ ValueType

using ValueType = typename V::ValueType

◆ ValueTypeParam

using ValueTypeParam = typename ByValueParam<ValueType>::type

◆ 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

◆ Mat3() [1/7]

Mat3 ( )

Default constructor, creates an identity matrix.

◆ Mat3() [2/7]

Mat3 ( const V &  off_in,
const V &  v1_in,
const V &  v2_in,
const V &  v3_in 
)

Initializes matrix from individual components.

◆ Mat3() [3/7]

Mat3 ( const V &  off_in,
const SqMat3< V > &  mat_in 
)

Initializes matrix from individual components.

◆ Mat3() [4/7]

MAXON_IMPLICIT Mat3 ( const SqMat3< V > &  mat_in)

Initializes matrix from square matrix. The translation part is initialized to zero.

◆ Mat3() [5/7]

Mat3 ( const Mat3< V2 > &  m)
explicit

Initializes matrix from another matrix.

◆ Mat3() [6/7]

Mat3 ( ENUM_DONT_INITIALIZE  v)
explicit

Skips initialization of matrix (for better speed)

◆ Mat3() [7/7]

Mat3 ( const Mat2< V2 > &  m)
explicit

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/4]

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

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/4]

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

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*() [3/4]

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

Transforms a point by a matrix.

◆ operator*() [4/4]

Mat3 operator* ( ValueTypeParam  s) const

Scales all matrix components by a scalar value.

◆ operator/()

Mat3 operator/ ( ValueTypeParam  s) const

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

◆ operator==()

BoolType operator== ( const Mat3< V > &  other) const

Equality operator.

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

◆ operator!=()

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

Inequality operator.

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

◆ operator~()

Mat3 operator~ ( ) const

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

◆ GetNormalized()

Mat3 GetNormalized ( ) const

Returns this matrix with all axis vectors normalized.

◆ ToString()

String ToString ( const FormatStatement formatStatement) const

Returns a readable string of the content.

Parameters
[in]formatStatementNullptr or additional formatting instruction. See also format_float.
Returns
The converted result.

◆ GetHashCode()

UInt GetHashCode ( ) const

Returns the hash code of the matrix (used for hash maps and comparisons).

Returns
The matrix' hash code.

◆ NullValue()

static const Mat3& NullValue ( )
static

Returns a null value of the matrix (see nullvalue.h for more details).

Returns
A null value of the matrix.

Friends And Related Function Documentation

◆ operator*

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

Scales all matrix components by a scalar value.

Member Data Documentation

◆ off

V off

The translation vector.

◆ sqmat

SqMat3<V> sqmat

The 3×3 matrix for rotation, scale and shear.