OGRE 14.3
Object-Oriented Graphics Rendering Engine
Loading...
Searching...
No Matches
Ogre::Matrix3 Class Reference

A 3x3 matrix which can represent rotations around axes. More...

#include <OgreMatrix3.h>

Public Member Functions

 Matrix3 ()
 Default constructor.
 
 Matrix3 (const Real arr[3][3])
 
 Matrix3 (Real fEntry00, Real fEntry01, Real fEntry02, Real fEntry10, Real fEntry11, Real fEntry12, Real fEntry20, Real fEntry21, Real fEntry22)
 
Real Determinant () const
 
Real determinant () const
 
void EigenSolveSymmetric (Real afEigenvalue[3], Vector3 akEigenvector[3]) const
 Eigensolver, matrix must be symmetric.
 
void FromAngleAxis (const Vector3 &rkAxis, const Radian &fRadians)
 
void FromAxes (const Vector3 &xAxis, const Vector3 &yAxis, const Vector3 &zAxis)
 
Vector3 GetColumn (size_t iCol) const
 
bool hasNegativeScale () const
 Determines if this matrix involves a negative scaling.
 
bool hasScale () const
 Determines if this matrix involves a scaling.
 
Matrix3 inverse () const
 
bool Inverse (Matrix3 &rkInverse, Real fTolerance=1e-06f) const
 
Matrix3 Inverse (Real fTolerance=1e-06f) const
 
bool operator!= (const Matrix3 &rkMatrix) const
 Tests 2 matrices for inequality.
 
Matrix3 operator* (const Matrix3 &rkMatrix) const
 Matrix concatenation using '*'.
 
Matrix3 operator* (Real fScalar) const
 Matrix * scalar.
 
Matrix3 operator+ (const Matrix3 &rkMatrix) const
 Matrix addition.
 
Matrix3 operator- () const
 
Matrix3 operator- (const Matrix3 &rkMatrix) const
 Matrix subtraction.
 
bool operator== (const Matrix3 &rkMatrix) const
 Tests 2 matrices for equality.
 
Realoperator[] (size_t iRow)
 
const Realoperator[] (size_t iRow) const
 Member access, allows use of construct mat[r][c].
 
Matrix3 orthonormalised () const
 Gram-Schmidt orthogonalisation (applied to columns of rotation matrix)
 
void Orthonormalize ()
 
void QDUDecomposition (Matrix3 &rkQ, Vector3 &rkD, Vector3 &rkU) const
 Orthogonal Q, diagonal D, upper triangular U stored as (u01,u02,u12)
 
void SetColumn (size_t iCol, const Vector3 &vec)
 
void SingularValueComposition (const Matrix3 &rkL, const Vector3 &rkS, const Matrix3 &rkR)
 
void SingularValueDecomposition (Matrix3 &rkL, Vector3 &rkS, Matrix3 &rkR) const
 Singular value decomposition.
 
Real SpectralNorm () const
 
void ToAngleAxis (Vector3 &rkAxis, Degree &rfAngle) const
 
void ToAngleAxis (Vector3 &rkAxis, Radian &rfAngle) const
 Note: Matrix must be orthonormal.
 
Matrix3 Transpose () const
 
Matrix3 transpose () const
 
Euler angle conversions

(De-)composes the matrix in/ from yaw, pitch and roll angles, where yaw is rotation about the Y vector, pitch is rotation about the X axis, and roll is rotation about the Z axis.

The function suffix indicates the (de-)composition order; e.g. with the YXZ variants the matrix will be (de-)composed as yaw*pitch*roll

For ToEulerAngles*, the return value denotes whether the solution is unique.

Note
The matrix to be decomposed must be orthonormal.
bool ToEulerAnglesXYZ (Radian &rfYAngle, Radian &rfPAngle, Radian &rfRAngle) const
 
bool ToEulerAnglesXZY (Radian &rfYAngle, Radian &rfPAngle, Radian &rfRAngle) const
 
bool ToEulerAnglesYXZ (Radian &rfYAngle, Radian &rfPAngle, Radian &rfRAngle) const
 
bool ToEulerAnglesYZX (Radian &rfYAngle, Radian &rfPAngle, Radian &rfRAngle) const
 
bool ToEulerAnglesZXY (Radian &rfYAngle, Radian &rfPAngle, Radian &rfRAngle) const
 
bool ToEulerAnglesZYX (Radian &rfYAngle, Radian &rfPAngle, Radian &rfRAngle) const
 
void FromEulerAnglesXYZ (const Radian &fYAngle, const Radian &fPAngle, const Radian &fRAngle)
 
void FromEulerAnglesXZY (const Radian &fYAngle, const Radian &fPAngle, const Radian &fRAngle)
 
void FromEulerAnglesYXZ (const Radian &fYAngle, const Radian &fPAngle, const Radian &fRAngle)
 
void FromEulerAnglesYZX (const Radian &fYAngle, const Radian &fPAngle, const Radian &fRAngle)
 
void FromEulerAnglesZXY (const Radian &fYAngle, const Radian &fPAngle, const Radian &fRAngle)
 
void FromEulerAnglesZYX (const Radian &fYAngle, const Radian &fPAngle, const Radian &fRAngle)
 

Static Public Member Functions

static void TensorProduct (const Vector3 &rkU, const Vector3 &rkV, Matrix3 &rkProduct)
 

Static Public Attributes

static const Real EPSILON
 
static const Matrix3 IDENTITY
 
static const Matrix3 ZERO
 

Detailed Description

A 3x3 matrix which can represent rotations around axes.

Note
All the code is adapted from the Wild Magic 0.2 Matrix library (http://www.geometrictools.com/).
The coordinate system is assumed to be right-handed.

Constructor & Destructor Documentation

◆ Matrix3() [1/3]

Ogre::Matrix3::Matrix3 ( )
inline

Default constructor.

Note
It does NOT initialize the matrix for efficiency.

◆ Matrix3() [2/3]

Ogre::Matrix3::Matrix3 ( const Real  arr[3][3])
inlineexplicit

◆ Matrix3() [3/3]

Ogre::Matrix3::Matrix3 ( Real  fEntry00,
Real  fEntry01,
Real  fEntry02,
Real  fEntry10,
Real  fEntry11,
Real  fEntry12,
Real  fEntry20,
Real  fEntry21,
Real  fEntry22 
)
inline

Member Function Documentation

◆ operator[]() [1/2]

const Real * Ogre::Matrix3::operator[] ( size_t  iRow) const
inline

Member access, allows use of construct mat[r][c].

◆ operator[]() [2/2]

Real * Ogre::Matrix3::operator[] ( size_t  iRow)
inline

◆ GetColumn()

Vector3 Ogre::Matrix3::GetColumn ( size_t  iCol) const
inline

◆ SetColumn()

void Ogre::Matrix3::SetColumn ( size_t  iCol,
const Vector3 vec 
)
inline

◆ FromAxes()

void Ogre::Matrix3::FromAxes ( const Vector3 xAxis,
const Vector3 yAxis,
const Vector3 zAxis 
)
inline

◆ operator==()

bool Ogre::Matrix3::operator== ( const Matrix3 rkMatrix) const

Tests 2 matrices for equality.

◆ operator!=()

bool Ogre::Matrix3::operator!= ( const Matrix3 rkMatrix) const
inline

Tests 2 matrices for inequality.

References Ogre::operator==().

◆ operator+()

Matrix3 Ogre::Matrix3::operator+ ( const Matrix3 rkMatrix) const

Matrix addition.

◆ operator-() [1/2]

Matrix3 Ogre::Matrix3::operator- ( const Matrix3 rkMatrix) const

Matrix subtraction.

◆ operator*() [1/2]

Matrix3 Ogre::Matrix3::operator* ( const Matrix3 rkMatrix) const

Matrix concatenation using '*'.

◆ operator-() [2/2]

Matrix3 Ogre::Matrix3::operator- ( ) const

◆ operator*() [2/2]

Matrix3 Ogre::Matrix3::operator* ( Real  fScalar) const

Matrix * scalar.

◆ Transpose()

Matrix3 Ogre::Matrix3::Transpose ( ) const

◆ Inverse() [1/2]

bool Ogre::Matrix3::Inverse ( Matrix3 rkInverse,
Real  fTolerance = 1e-06f 
) const

◆ Inverse() [2/2]

Matrix3 Ogre::Matrix3::Inverse ( Real  fTolerance = 1e-06f) const

◆ Determinant()

Real Ogre::Matrix3::Determinant ( ) const
inline

◆ transpose()

Matrix3 Ogre::Matrix3::transpose ( ) const
inline

◆ inverse()

Matrix3 Ogre::Matrix3::inverse ( ) const
inline

◆ determinant()

Real Ogre::Matrix3::determinant ( ) const
inline

◆ hasNegativeScale()

bool Ogre::Matrix3::hasNegativeScale ( ) const
inline

Determines if this matrix involves a negative scaling.

◆ SingularValueDecomposition()

void Ogre::Matrix3::SingularValueDecomposition ( Matrix3 rkL,
Vector3 rkS,
Matrix3 rkR 
) const

Singular value decomposition.

◆ SingularValueComposition()

void Ogre::Matrix3::SingularValueComposition ( const Matrix3 rkL,
const Vector3 rkS,
const Matrix3 rkR 
)

◆ orthonormalised()

Matrix3 Ogre::Matrix3::orthonormalised ( ) const
inline

Gram-Schmidt orthogonalisation (applied to columns of rotation matrix)

◆ Orthonormalize()

void Ogre::Matrix3::Orthonormalize ( )
inline

◆ QDUDecomposition()

void Ogre::Matrix3::QDUDecomposition ( Matrix3 rkQ,
Vector3 rkD,
Vector3 rkU 
) const

Orthogonal Q, diagonal D, upper triangular U stored as (u01,u02,u12)

◆ SpectralNorm()

Real Ogre::Matrix3::SpectralNorm ( ) const

◆ ToAngleAxis() [1/2]

void Ogre::Matrix3::ToAngleAxis ( Vector3 rkAxis,
Radian rfAngle 
) const

Note: Matrix must be orthonormal.

◆ ToAngleAxis() [2/2]

void Ogre::Matrix3::ToAngleAxis ( Vector3 rkAxis,
Degree rfAngle 
) const
inline

◆ FromAngleAxis()

void Ogre::Matrix3::FromAngleAxis ( const Vector3 rkAxis,
const Radian fRadians 
)

◆ ToEulerAnglesXYZ()

bool Ogre::Matrix3::ToEulerAnglesXYZ ( Radian rfYAngle,
Radian rfPAngle,
Radian rfRAngle 
) const

◆ ToEulerAnglesXZY()

bool Ogre::Matrix3::ToEulerAnglesXZY ( Radian rfYAngle,
Radian rfPAngle,
Radian rfRAngle 
) const

◆ ToEulerAnglesYXZ()

bool Ogre::Matrix3::ToEulerAnglesYXZ ( Radian rfYAngle,
Radian rfPAngle,
Radian rfRAngle 
) const

◆ ToEulerAnglesYZX()

bool Ogre::Matrix3::ToEulerAnglesYZX ( Radian rfYAngle,
Radian rfPAngle,
Radian rfRAngle 
) const

◆ ToEulerAnglesZXY()

bool Ogre::Matrix3::ToEulerAnglesZXY ( Radian rfYAngle,
Radian rfPAngle,
Radian rfRAngle 
) const

◆ ToEulerAnglesZYX()

bool Ogre::Matrix3::ToEulerAnglesZYX ( Radian rfYAngle,
Radian rfPAngle,
Radian rfRAngle 
) const

◆ FromEulerAnglesXYZ()

void Ogre::Matrix3::FromEulerAnglesXYZ ( const Radian fYAngle,
const Radian fPAngle,
const Radian fRAngle 
)

◆ FromEulerAnglesXZY()

void Ogre::Matrix3::FromEulerAnglesXZY ( const Radian fYAngle,
const Radian fPAngle,
const Radian fRAngle 
)

◆ FromEulerAnglesYXZ()

void Ogre::Matrix3::FromEulerAnglesYXZ ( const Radian fYAngle,
const Radian fPAngle,
const Radian fRAngle 
)

◆ FromEulerAnglesYZX()

void Ogre::Matrix3::FromEulerAnglesYZX ( const Radian fYAngle,
const Radian fPAngle,
const Radian fRAngle 
)

◆ FromEulerAnglesZXY()

void Ogre::Matrix3::FromEulerAnglesZXY ( const Radian fYAngle,
const Radian fPAngle,
const Radian fRAngle 
)

◆ FromEulerAnglesZYX()

void Ogre::Matrix3::FromEulerAnglesZYX ( const Radian fYAngle,
const Radian fPAngle,
const Radian fRAngle 
)

◆ EigenSolveSymmetric()

void Ogre::Matrix3::EigenSolveSymmetric ( Real  afEigenvalue[3],
Vector3  akEigenvector[3] 
) const

Eigensolver, matrix must be symmetric.

◆ TensorProduct()

static void Ogre::Matrix3::TensorProduct ( const Vector3 rkU,
const Vector3 rkV,
Matrix3 rkProduct 
)
static

◆ hasScale()

bool Ogre::Matrix3::hasScale ( ) const
inline

Determines if this matrix involves a scaling.

References Ogre::Math::RealEqual().

Member Data Documentation

◆ EPSILON

const Real Ogre::Matrix3::EPSILON
static

◆ ZERO

const Matrix3 Ogre::Matrix3::ZERO
static

◆ IDENTITY

const Matrix3 Ogre::Matrix3::IDENTITY
static

The documentation for this class was generated from the following file: