3x3 matrix class
Some clarifications, as there have been much confusion about matrix formats etc in the past.
Short:
Matrix have base vectors in columns (vectors are column matrices, 3x1 matrices).
Matrix is physically stored in column major format
Matrices are concaternated from left
Long: Given three base vectors a, b and c the matrix is stored as
|a.x b.x c.x| |a.y b.y c.y| |a.z b.z c.z|
Vectors are treated as columns, so the vector v is
|x| |y| |z|
And matrices are applied before the vector (pre-multiplication) v’ = M*v
|x’| |a.x b.x c.x| |x| |a.x*x + b.x*y + c.x*z| |y’| = |a.y b.y c.y| * |y| = |a.y*x + b.y*y + c.y*z| |z’| |a.z b.z c.z| |z| |a.z*x + b.z*y + c.z*z|
Physical storage and indexing: To be compatible with popular 3d rendering APIs (read D3d and OpenGL) the physical indexing is
|0 3 6| |1 4 7| |2 5 8|
index = column*3 + row
which in C++ translates to M[column][row]
The mathematical indexing is M_row,column and this is what is used for _-notation so _12 is 1st row, second column and operator(row, column)!
Public Functions
-
inline PxMat33T()
Default constructor.
-
inline PxMat33T(PxIDENTITY)
identity constructor
-
inline PxMat33T(PxZERO)
zero constructor
-
inline PxMat33T(const PxVec3T<Type> &col0, const PxVec3T<Type> &col1, const PxVec3T<Type> &col2)
Construct from three base vectors.
-
inline explicit PxMat33T(Type r)
constructor from a scalar, which generates a multiple of the identity matrix
-
inline explicit PxMat33T(Type values[])
Construct from Type[9].
-
inline explicit PxMat33T(const PxQuatT<Type> &q)
Construct from a quaternion.
-
inline PxMat33T(const PxMat33T &other)
Copy constructor.
-
inline PxMat33T &operator=(const PxMat33T &other)
Assignment operator.
-
inline bool operator==(const PxMat33T &m) const
returns true if the two matrices are exactly equal
-
inline const PxMat33T getTranspose() const
Get transposed matrix.
-
inline const PxMat33T getInverse() const
Get the real inverse.
-
inline Type getDeterminant() const
Get determinant.
-
inline const PxMat33T operator-() const
Unary minus.
-
inline const PxMat33T operator+(const PxMat33T &other) const
Add.
-
inline const PxMat33T operator-(const PxMat33T &other) const
Subtract.
-
inline const PxMat33T operator*(Type scalar) const
Scalar multiplication.
-
inline const PxVec3T<Type> operator*(const PxVec3T<Type> &vec) const
Matrix vector multiplication (returns ‘this->transform(vec)’)
-
inline const PxMat33T operator*(const PxMat33T &other) const
Matrix multiplication.
-
inline PxMat33T &operator+=(const PxMat33T &other)
Equals-add.
-
inline PxMat33T &operator-=(const PxMat33T &other)
Equals-sub.
-
inline PxMat33T &operator*=(Type scalar)
Equals scalar multiplication.
-
inline PxMat33T &operator*=(const PxMat33T &other)
Equals matrix multiplication.
-
inline Type operator()(PxU32 row, PxU32 col) const
Element access, mathematical way!
-
inline Type &operator()(PxU32 row, PxU32 col)
Element access, mathematical way!
-
inline const PxVec3T<Type> transform(const PxVec3T<Type> &other) const
Transform vector by matrix, equal to v’ = M*v.
-
inline const PxVec3T<Type> transformTranspose(const PxVec3T<Type> &other) const
Transform vector by matrix transpose, v’ = M^t*v.
-
inline const Type *front() const
-
inline PxVec3T<Type> &operator[](PxU32 num)
-
inline const PxVec3T<Type> &operator[](PxU32 num) const
Public Static Functions
-
static inline const PxMat33T createDiagonal(const PxVec3T<Type> &d)
Construct from diagonal, off-diagonals are zero.
-
static inline const PxMat33T outer(const PxVec3T<Type> &a, const PxVec3T<Type> &b)
Computes the outer product of two vectors.