diff --git a/util/Matrix.cc b/util/Matrix.cc index e20aa62..790276c 100644 --- a/util/Matrix.cc +++ b/util/Matrix.cc @@ -14,6 +14,39 @@ Matrix Matrix::identity() return res; } +double Matrix::determinant() +{ + return m_matrix[0][0]*m_matrix[1][1]*m_matrix[2][2]*m_matrix[3][3] + + m_matrix[0][0]*m_matrix[1][2]*m_matrix[2][3]*m_matrix[3][1] + + m_matrix[0][0]*m_matrix[1][3]*m_matrix[2][1]*m_matrix[3][2] + + m_matrix[0][1]*m_matrix[1][0]*m_matrix[2][3]*m_matrix[3][2] + + + m_matrix[0][1]*m_matrix[1][2]*m_matrix[2][0]*m_matrix[3][3] + + m_matrix[0][1]*m_matrix[1][3]*m_matrix[2][2]*m_matrix[3][0] + + m_matrix[0][2]*m_matrix[1][0]*m_matrix[2][1]*m_matrix[3][3] + + m_matrix[0][2]*m_matrix[1][1]*m_matrix[2][3]*m_matrix[3][0] + + + m_matrix[0][2]*m_matrix[1][3]*m_matrix[2][0]*m_matrix[3][1] + + m_matrix[0][3]*m_matrix[1][0]*m_matrix[2][2]*m_matrix[3][1] + + m_matrix[0][3]*m_matrix[1][1]*m_matrix[2][0]*m_matrix[3][2] + + m_matrix[0][3]*m_matrix[1][2]*m_matrix[2][1]*m_matrix[3][0] + + - m_matrix[0][0]*m_matrix[1][1]*m_matrix[2][3]*m_matrix[3][2] + - m_matrix[0][0]*m_matrix[1][2]*m_matrix[2][1]*m_matrix[3][3] + - m_matrix[0][0]*m_matrix[1][3]*m_matrix[2][2]*m_matrix[3][1] + - m_matrix[0][1]*m_matrix[1][0]*m_matrix[2][2]*m_matrix[3][3] + + - m_matrix[0][1]*m_matrix[1][2]*m_matrix[2][3]*m_matrix[3][0] + - m_matrix[0][1]*m_matrix[1][3]*m_matrix[2][0]*m_matrix[3][2] + - m_matrix[0][2]*m_matrix[1][0]*m_matrix[2][3]*m_matrix[3][1] + - m_matrix[0][2]*m_matrix[1][1]*m_matrix[2][0]*m_matrix[3][3] + + - m_matrix[0][2]*m_matrix[1][3]*m_matrix[2][1]*m_matrix[3][0] + - m_matrix[0][3]*m_matrix[1][0]*m_matrix[2][1]*m_matrix[3][2] + - m_matrix[0][3]*m_matrix[1][1]*m_matrix[2][2]*m_matrix[3][0] + - m_matrix[0][3]*m_matrix[1][2]*m_matrix[2][0]*m_matrix[3][1]; +} + Matrix operator*(const Matrix & m1, const Matrix & m2) { Matrix res; diff --git a/util/Matrix.h b/util/Matrix.h index 275c0b5..3c3c8f6 100644 --- a/util/Matrix.h +++ b/util/Matrix.h @@ -11,6 +11,7 @@ class Matrix Matrix_row_t & operator[](int idx) { return m_matrix[idx]; } const Matrix_row_t & operator[](int idx) const { return m_matrix[idx]; } static Matrix identity(); + double determinant(); protected: double m_matrix[4][4];