2D vector and matrix calculations are very common in bi-dimensional games and are used in side-scrollers, isometric games, 2D game engines and similar needs.
Common operations are implemented through the use of templated overloaded operators, allowing for very readable and fast 2D matrix calculations.
This class is compiler-agnostic, and can be used on multiple platforms (including mobile) with minimal refactoring.
Declare a matrix using :
CMatrix2x2f Ma;
Ma.Set ( 1 ,2 , 3 ,4 );
Mb.Set ( 4 ,5 , 6 ,7 );
Mc.Set ( 1 ,2 , 2 ,1 );
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
Questions & Comments