static matrix3x2 get_scale (T s) { return matrix3x2(s ,0,0,s ,0 ,0 ); }
/** **************************************************************************************************** \fn void UnitTest( void ) \brief The unit test of Matrix class \param NONE \return NONE **************************************************************************************************** */ void GameEngine::Math::Matrix::UnitTest( void ) { FUNCTION_START; Matrix matrix2x2( 2, 2 ); // Check creation for( UINT8 i = 0; i < 2; ++i ) { for( UINT8 j = 0; j < 2; ++j ) assert( matrix2x2(i, j) == 0 ); } // Check matrix identity matrix2x2(0, 0) = 1; matrix2x2(0, 1) = 2; matrix2x2(1, 0) = 3; matrix2x2(1, 1) = 4; Matrix identityMatrix( 2, 2 ); identityMatrix(0, 0) = 1; identityMatrix(1, 1) = 1; Matrix m( 2, 2 ); m = matrix2x2.Identity(); assert( matrix2x2.Identity() == identityMatrix ); // Check matrix transpose Matrix matrix2x3( 2, 3 ); matrix2x3( 0, 0 ) = 1; matrix2x3( 0, 1 ) = 2; matrix2x3( 0, 2 ) = 3; matrix2x3( 1, 0 ) = 4; matrix2x3( 1, 1 ) = 5; matrix2x3( 1, 2 ) = 6; matrix2x3.Transpose(); Matrix matrix3x2( 3, 2 ); matrix3x2( 0, 0 ) = 1; matrix3x2( 0, 1 ) = 4; matrix3x2( 1, 0 ) = 2; matrix3x2( 1, 1 ) = 5; matrix3x2( 2, 0 ) = 3; matrix3x2( 2, 1 ) = 6; assert( matrix2x3 == matrix3x2 ); // Check matrix 3x3 inverse Matrix matrix3x3( 3, 3 ); matrix3x3( 0, 0 ) = 2; matrix3x3( 0, 1 ) = -1; matrix3x3( 0, 2 ) = 3; matrix3x3( 1, 0 ) = 1; matrix3x3( 1, 1 ) = 6; matrix3x3( 1, 2 ) = -4; matrix3x3( 2, 0 ) = 5; matrix3x3( 2, 1 ) = 0; matrix3x3( 2, 2 ) = 8; Matrix matrix3x3Inverse( 3, 3 ); Matrix3Inverse( matrix3x3, matrix3x3Inverse ); assert( (matrix3x3 * matrix3x3Inverse) == matrix3x3.Identity() ); // Check matrix 4x4 inverse Matrix matrix4x4( 4, 4 ); matrix4x4( 0, 0 ) = 2; matrix4x4( 0, 1 ) = 3; matrix4x4( 0, 2 ) = 4; matrix4x4( 0, 3 ) = 5; matrix4x4( 1, 0 ) = 5; matrix4x4( 1, 1 ) = 7; matrix4x4( 1, 2 ) = 9; matrix4x4( 1, 3 ) = 9; matrix4x4( 2, 0 ) = 5; matrix4x4( 2, 1 ) = 8; matrix4x4( 2, 2 ) = 7; matrix4x4( 2, 3 ) = 4; matrix4x4( 3, 0 ) = 4; matrix4x4( 3, 1 ) = 3; matrix4x4( 3, 2 ) = 3; matrix4x4( 3, 3 ) = 2; Matrix matrix4x4Inverse( 4, 4 ); Matrix4Inverse( matrix4x4, matrix4x4Inverse ); Matrix matrix4x4Result( 4, 4 ); matrix4x4Result = matrix4x4 * matrix4x4Inverse; assert( (matrix4x4 * matrix4x4Inverse) == matrix4x4.Identity() ); FUNCTION_FINISH; }
static matrix3x2 get_scale (T x, T y) { return matrix3x2(x, 0,0,y, 0 ,0 ); }
static matrix3x2 get_scale (const point2<T>& s) { return matrix3x2(s.x,0,0,s.y,0 ,0 ); }
static matrix3x2 get_translate(T x, T y) { return matrix3x2(1 ,0,0,1 ,x, y ); }
static matrix3x2 get_translate(const point2<T>& t) { return matrix3x2(1 ,0,0,1 ,t.x,t.y); }
static matrix3x2 get_rotate(T rads) { T c=std::cos(rads); T s=std::sin(rads); return matrix3x2(c,s,-s,c,0,0); }