Class Matrix3x3
Defined in File Matrix3x3.h
Class Documentation
-
class Matrix3x3
The Matrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with Quaternion, Transform and Vector3. Make sure to only include a pure orthogonal matrix without scaling.
Public Functions
-
inline Matrix3x3()
No initializaion constructor.
-
inline explicit Matrix3x3(const Quaternion &q)
Constructor from Quaternion.
-
inline Matrix3x3(const tf2Scalar &xx, const tf2Scalar &xy, const tf2Scalar &xz, const tf2Scalar &yx, const tf2Scalar &yy, const tf2Scalar &yz, const tf2Scalar &zx, const tf2Scalar &zy, const tf2Scalar &zz)
Constructor with row major formatting.
- inline TF2SIMD_FORCE_INLINE Matrix3x3 & operator= (const Matrix3x3 &other)
Assignment Operator.
- inline TF2SIMD_FORCE_INLINE Vector3 getColumn (int i) const
Get a column of the matrix as a vector.
- Parameters:
i – Column number 0 indexed
- inline TF2SIMD_FORCE_INLINE const Vector3 & getRow (int i) const
Get a row of the matrix as a vector.
- Parameters:
i – Row number 0 indexed
- inline TF2SIMD_FORCE_INLINE Vector3 & operator[] (int i)
Get a mutable reference to a row of the matrix as a vector.
- Parameters:
i – Row number 0 indexed
- inline TF2SIMD_FORCE_INLINE const Vector3 & operator[] (int i) const
Get a const reference to a row of the matrix as a vector.
- Parameters:
i – Row number 0 indexed
-
Matrix3x3 &operator*=(const Matrix3x3 &m)
Multiply by the target matrix on the right.
- Parameters:
m – Rotation matrix to be applied Equivilant to this = this * m
-
inline void setFromOpenGLSubMatrix(const tf2Scalar *m)
Set from a carray of tf2Scalars.
- Parameters:
m – A pointer to the beginning of an array of 9 tf2Scalars
-
inline void setValue(const tf2Scalar &xx, const tf2Scalar &xy, const tf2Scalar &xz, const tf2Scalar &yx, const tf2Scalar &yy, const tf2Scalar &yz, const tf2Scalar &zx, const tf2Scalar &zy, const tf2Scalar &zz)
Set the values of the matrix explicitly (row major)
- Parameters:
xx – Top left
xy – Top Middle
xz – Top Right
yx – Middle Left
yy – Middle Middle
yz – Middle Right
zx – Bottom Left
zy – Bottom Middle
zz – Bottom Right
-
inline void setRotation(const Quaternion &q)
Set the matrix from a quaternion.
- Parameters:
q – The Quaternion to match
-
inline void setEulerYPR(tf2Scalar eulerZ, tf2Scalar eulerY, tf2Scalar eulerX)
Set the matrix from euler angles YPR around ZYX axes.
These angles are used to produce a rotation matrix. The euler angles are applied in ZYX order. I.e a vector is first rotated about X then Y and then Z
- Parameters:
eulerZ – Yaw aboud Z axis
eulerY – Pitch around Y axis
eulerX – Roll about X axis
-
inline void setRPY(tf2Scalar roll, tf2Scalar pitch, tf2Scalar yaw)
Set the matrix using RPY about XYZ fixed axes.
- Parameters:
roll – Roll about X axis
pitch – Pitch around Y axis
yaw – Yaw aboud Z axis
-
inline void setIdentity()
Set the matrix to the identity.
-
inline void getOpenGLSubMatrix(tf2Scalar *m) const
Fill the values of the matrix into a 9 element array.
- Parameters:
m – The array to be filled
-
inline void getRotation(Quaternion &q) const
Get the matrix represented as a quaternion.
- Parameters:
q – The quaternion which will be set
-
inline void getEulerYPR(tf2Scalar &yaw, tf2Scalar &pitch, tf2Scalar &roll, unsigned int solution_number = 1) const
Get the matrix represented as euler angles around YXZ, roundtrip with setEulerYPR.
- Parameters:
yaw – Yaw around Z axis
pitch – Pitch around Y axis
roll – around X axis
-
inline void getRPY(tf2Scalar &roll, tf2Scalar &pitch, tf2Scalar &yaw, unsigned int solution_number = 1) const
Get the matrix represented as roll pitch and yaw about fixed axes XYZ.
- Parameters:
roll – around X axis
pitch – Pitch around Y axis
yaw – Yaw around Z axis
solution_number – Which solution of two possible solutions ( 1 or 2) are possible values
-
inline Matrix3x3 scaled(const Vector3 &s) const
Create a scaled copy of the matrix.
- Parameters:
s – Scaling vector The elements of the vector will scale each column
- inline TF2SIMD_FORCE_INLINE tf2Scalar tdotx (const Vector3 &v) const
- inline TF2SIMD_FORCE_INLINE tf2Scalar tdoty (const Vector3 &v) const
- inline TF2SIMD_FORCE_INLINE tf2Scalar tdotz (const Vector3 &v) const
-
inline void diagonalize(Matrix3x3 &rot, tf2Scalar threshold, int maxSteps)
diagonalizes this matrix by the Jacobi method.
Note that this matrix is assumed to be symmetric.
- Parameters:
rot – stores the rotation from the coordinate system in which the matrix is diagonal to the original coordinate system, i.e., old_this = rot * new_this * rot^T.
threshold – See iteration
iteration – The iteration stops when all off-diagonal elements are less than the threshold multiplied by the sum of the absolute values of the diagonal, or when maxSteps have been executed.
-
inline tf2Scalar cofac(int r1, int c1, int r2, int c2) const
Calculate the matrix cofactor.
- Parameters:
r1 – The first row to use for calculating the cofactor
c1 – The first column to use for calculating the cofactor
r1 – The second row to use for calculating the cofactor
c1 – The second column to use for calculating the cofactor See http://en.wikipedia.org/wiki/Cofactor_(linear_algebra) for more details
-
void serialize(struct Matrix3x3Data &dataOut) const
-
void serializeFloat(struct Matrix3x3FloatData &dataOut) const
-
void deSerialize(const struct Matrix3x3Data &dataIn)
-
void deSerializeFloat(const struct Matrix3x3FloatData &dataIn)
-
void deSerializeDouble(const struct Matrix3x3DoubleData &dataIn)
-
inline Matrix3x3()