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
T CMatrix4x4<T>::Determinate() const { T det, res = 0; T i = 1; for(int n = 0; n < 4; n++, i*=-1) { Matrix3x3<T> mat = GetSubMatrix3x3(0,n); det = mat.Determinate(); res+=m_Entries[n] * i * det; }//end for return res; }//end Determinate