3x3 matrix class More...
#include <PxMat33.h>
Public Member Functions | |
PX_CUDA_CALLABLE PX_FORCE_INLINE | PxMat33 () |
Default constructor. More... | |
PX_CUDA_CALLABLE PX_INLINE | PxMat33 (PxIDENTITY r) |
identity constructor More... | |
PX_CUDA_CALLABLE PX_INLINE | PxMat33 (PxZERO r) |
zero constructor More... | |
PX_CUDA_CALLABLE | PxMat33 (const PxVec3 &col0, const PxVec3 &col1, const PxVec3 &col2) |
Construct from three base vectors. More... | |
PX_CUDA_CALLABLE PX_INLINE | PxMat33 (float r) |
constructor from a scalar, which generates a multiple of the identity matrix More... | |
PX_CUDA_CALLABLE PX_INLINE | PxMat33 (float values[]) |
Construct from float[9]. More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE | PxMat33 (const PxQuat &q) |
Construct from a quaternion. More... | |
PX_CUDA_CALLABLE PX_INLINE | PxMat33 (const PxMat33 &other) |
Copy constructor. More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE PxMat33 & | operator= (const PxMat33 &other) |
Assignment operator. More... | |
PX_CUDA_CALLABLE PX_INLINE bool | operator== (const PxMat33 &m) const |
returns true if the two matrices are exactly equal More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE const PxMat33 | getTranspose () const |
Get transposed matrix. More... | |
PX_CUDA_CALLABLE PX_INLINE const PxMat33 | getInverse () const |
Get the real inverse. More... | |
PX_CUDA_CALLABLE PX_INLINE float | getDeterminant () const |
Get determinant. More... | |
PX_CUDA_CALLABLE PX_INLINE const PxMat33 | operator- () const |
Unary minus. More... | |
PX_CUDA_CALLABLE PX_INLINE const PxMat33 | operator+ (const PxMat33 &other) const |
Add. More... | |
PX_CUDA_CALLABLE PX_INLINE const PxMat33 | operator- (const PxMat33 &other) const |
Subtract. More... | |
PX_CUDA_CALLABLE PX_INLINE const PxMat33 | operator* (float scalar) const |
Scalar multiplication. More... | |
PX_CUDA_CALLABLE PX_INLINE const PxVec3 | operator* (const PxVec3 &vec) const |
Matrix vector multiplication (returns 'this->transform(vec)') More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE const PxMat33 | operator* (const PxMat33 &other) const |
Matrix multiplication. More... | |
PX_CUDA_CALLABLE PX_INLINE PxMat33 & | operator+= (const PxMat33 &other) |
Equals-add. More... | |
PX_CUDA_CALLABLE PX_INLINE PxMat33 & | operator-= (const PxMat33 &other) |
Equals-sub. More... | |
PX_CUDA_CALLABLE PX_INLINE PxMat33 & | operator*= (float scalar) |
Equals scalar multiplication. More... | |
PX_CUDA_CALLABLE PX_INLINE PxMat33 & | operator*= (const PxMat33 &other) |
Equals matrix multiplication. More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE float | operator() (unsigned int row, unsigned int col) const |
Element access, mathematical way! More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE float & | operator() (unsigned int row, unsigned int col) |
Element access, mathematical way! More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE const PxVec3 | transform (const PxVec3 &other) const |
Transform vector by matrix, equal to v' = M*v. More... | |
PX_CUDA_CALLABLE PX_INLINE const PxVec3 | transformTranspose (const PxVec3 &other) const |
Transform vector by matrix transpose, v' = M^t*v. More... | |
PX_CUDA_CALLABLE PX_FORCE_INLINE const float * | front () const |
PX_CUDA_CALLABLE PX_FORCE_INLINE PxVec3 & | operator[] (unsigned int num) |
PX_CUDA_CALLABLE PX_FORCE_INLINE const PxVec3 & | operator[] (unsigned int num) const |
Static Public Member Functions | |
PX_CUDA_CALLABLE static PX_INLINE const PxMat33 | createDiagonal (const PxVec3 &d) |
Construct from diagonal, off-diagonals are zero. More... | |
Public Attributes | |
PxVec3 | column0 |
PxVec3 | column1 |
PxVec3 | column2 |
Friends | |
PxMat33 | operator* (float, const PxMat33 &) |
3x3 matrix class
Some clarifications, as there have been much confusion about matrix formats etc in the past.
Short:
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)!
|
inline |
Default constructor.
|
inline |
identity constructor
References PX_UNUSED().
|
inline |
zero constructor
References PX_UNUSED().
|
inline |
Construct from three base vectors.
|
inlineexplicit |
constructor from a scalar, which generates a multiple of the identity matrix
|
inlineexplicit |
Construct from float[9].
|
inlineexplicit |
|
inline |
Copy constructor.
|
inlinestatic |
Construct from diagonal, off-diagonals are zero.
References PxVec3::x, PxVec3::y, and PxVec3::z.
Referenced by PxMassProperties::PxMassProperties().
|
inline |
|
inline |
Get determinant.
|
inline |
|
inline |
Get transposed matrix.
Referenced by PxMassProperties::rotateInertia(), PxMeshScale::toMat33(), and PxMassProperties::translateInertia().
|
inline |
Element access, mathematical way!
|
inline |
Element access, mathematical way!
|
inline |
Scalar multiplication.
|
inline |
Matrix vector multiplication (returns 'this->transform(vec)')
|
inline |
|
inline |
Equals scalar multiplication.
|
inline |
Equals matrix multiplication.
|
inline |
|
inline |
|
inline |
Unary minus.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Transform vector by matrix transpose, v' = M^t*v.
PxVec3 PxMat33::column0 |
Referenced by PxBounds3::basisExtent(), getInverse(), PxMassProperties::getMassSpaceInertia(), operator*(), operator+(), operator+=(), operator-(), operator-=(), operator=(), operator==(), PxQuat::PxQuat(), PxMassProperties::rotateInertia(), PxMassProperties::scaleInertia(), PxMassProperties::sum(), PxMeshScale::toMat33(), and PxMassProperties::translateInertia().
PxVec3 PxMat33::column1 |
Referenced by PxBounds3::basisExtent(), getInverse(), PxMassProperties::getMassSpaceInertia(), operator*(), operator+(), operator+=(), operator-(), operator-=(), operator=(), operator==(), PxQuat::PxQuat(), PxMassProperties::rotateInertia(), PxMassProperties::scaleInertia(), PxMassProperties::sum(), PxMeshScale::toMat33(), and PxMassProperties::translateInertia().
PxVec3 PxMat33::column2 |
Referenced by PxBounds3::basisExtent(), getInverse(), PxMassProperties::getMassSpaceInertia(), operator*(), operator+(), operator+=(), operator-(), operator-=(), operator=(), operator==(), PxQuat::PxQuat(), PxMassProperties::rotateInertia(), PxMassProperties::scaleInertia(), PxMassProperties::sum(), PxMeshScale::toMat33(), and PxMassProperties::translateInertia().