4x4 Matrix computations are the backbone of every 3d engine, 3d transformations for handling mesh of model are accomplished using 4th order matrix operations. Common operations are implemented through the use of templated overloaded operators, allowing for very readable and fast 4x4 matrix calculations. This class is compiler-agnostic, and can be used on multiple platforms (including mobile) with minimal refactoring.
Declare a matrix using :
CMatrix4x4f Ma;
Ma.Set ( 1 ,2 , 3 ,4 ,
5,6,7,8,
9,10,11,12,
13,14,15 );
Common operations :
// multiplication
Ma=Ma * 2.0f ;
Ma*= 2.0f ;
Ma = Mb * 3.0f;
Ma = 3.0f * Mb ;
Ma = Mb / 2.0f ; // multipication by inverse of a constant
// sum and subtraction
Ma+=Mb;
Ma-=Mb;
Ma = Mb + Mc;
Ma = -Mb + Mc;
// matrix multilication
Ma = Mb * Mc ;
Ma= 4.0f / Mb;
Invert(Ma); //invert matrix
Transpose(Ma); //transpose matrix
Zero(Ma); // zero out the matrix
Identity(Ma); // identity matrix
Ma.Get(1,0); // gets value at coordinates
Ma[0]=2.0f; // setting a value by direct access
// logic operations
if ( Ma!=Mb ) cout << "Matrices are different" << endl;
if ( Ma==Mb ) cout << "Matrices are equal" << endl;
Rot ( Ma,45.0f ); // compute matrix rotation
GetRank(Ma); // gets matrix rank
float d = Ma.Determinant(); // gets determinant
// compute the trace of the matrix
float t= GetMatrixTrace( Ma );
// Determine if the matrix is lower triangular
bool b=IsLowerTriangular (Ma);
// Determine if the matrix is upper triangular
bool b=IsUpperTriangular (Ma);
// Determine if the matrix is skew-symmetric
bool b=IsSkewSimmetric(Ma) ;
// test if matrix is simmetric
bool b=IsSimmetric(Ma);
// Determine if the matrix is diagonal
bool b=IsDiagonal (Ma) ;
// calculate the condition number
// which is the norm multiplied
// byt the norm of the matrix
// inverse
float c=ConditionNumber(Ma);
// calculate the norm of a matrix
float n=Norm (Ma);
// Determine if the matrix is singular
bool b=Ma.IsSingular (Ma) ;
// solve the system defined by the matrix
SolveLinearMatrix( Ma,V,S );
Questions & Comments