From aec4a17e450f3ae064ae69f44ed7b3d5a1a36187 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 20 Jan 2009 00:12:06 +0000 Subject: [PATCH] added determinant() to util/Matrix module git-svn-id: svn://anubis/fart/trunk@10 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- util/Matrix.cc | 33 +++++++++++++++++++++++++++++++++ util/Matrix.h | 1 + 2 files changed, 34 insertions(+) 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];