Example #1
0
		Matrix3x3 &Matrix3x3::Inverse( )
		{
			// Compute determinate
			ZED_FLOAT32 Det = Determinate( );

			if( ZED::Arithmetic::IsZero( Det ) )
			{
				zedTrace( "Error: Matrix::Inverse -- singular matrix!" );
				return *this;
			}

			// Set this matrix as the adjoint and multiply by 1/Det to get the
			// inverse
			ZED_FLOAT32 InverseDet = 1.0f / Det;
			*this = Adjoint( );

			m_M[ 0 ] *= InverseDet;
			m_M[ 1 ] *= InverseDet;
			m_M[ 2 ] *= InverseDet;
			m_M[ 3 ] *= InverseDet;
			m_M[ 4 ] *= InverseDet;
			m_M[ 5 ] *= InverseDet;
			m_M[ 6 ] *= InverseDet;
			m_M[ 7 ] *= InverseDet;
			m_M[ 8 ] *= InverseDet;

			return *this;
		}
Example #2
0
bool CMatrix4x4<T>::GetInverseMatrix(CMatrix4x4 &matInverse) const
{

	T nDeterminate = Determinate();

	int i, j, sign;

	if(fabs(nDeterminate) < 0.0005)
	{
		return false;
	}

	for(i = 0; i < 4; i++)
	{
		for(j = 0; j < 4; j++)
		{

			sign = 1 - ((i+j)%2) * 2;

			Matrix3x3<T> matSub = GetSubMatrix3x3(i,j);

			T det = matSub.Determinate();

			matInverse.m_Entries[i+j*4] = (det * sign)/nDeterminate;

		}//end for
	}//end for

	return true;
}//end GetInverseMatrix
Example #3
0
Vector3f Matrix3f::Solve(const Vector3f& constants) const{
	float det = Determinate();
	float x = SetColumn(0, constants).Determinate() / det;
	float y = SetColumn(1, constants).Determinate() / det;
	float z = SetColumn(2, constants).Determinate() / det;
	return(Vector3f(x, y, z));
}