slight format changes to util/Matrix

git-svn-id: svn://anubis/fart/trunk@18 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2009-01-20 14:22:22 +00:00
parent 6283577b42
commit 0c8597f31b

View File

@ -24,39 +24,41 @@ Matrix Matrix::identity()
return res;
}
/* Formulas from http://www.cvl.iis.u-tokyo.ac.jp/~miyazaki/tech/teche23.html */
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]
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][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][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][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][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];
- 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];
}
/* Formulas from http://www.cvl.iis.u-tokyo.ac.jp/~miyazaki/tech/teche23.html */
void Matrix::calculateInverse()
{
if (m_inverse_calculated)
@ -66,102 +68,102 @@ void Matrix::calculateInverse()
double det = determinant();
if (det == 0.0)
return;
m_inverse[0][0] = m_matrix[1][1]*m_matrix[2][2]*m_matrix[3][3]
+ m_matrix[1][2]*m_matrix[2][3]*m_matrix[3][1]
+ m_matrix[1][3]*m_matrix[2][1]*m_matrix[3][2]
- m_matrix[1][1]*m_matrix[2][3]*m_matrix[3][2]
- m_matrix[1][2]*m_matrix[2][1]*m_matrix[3][3]
- m_matrix[1][3]*m_matrix[2][2]*m_matrix[3][1];
m_inverse[0][1] = m_matrix[0][1]*m_matrix[2][3]*m_matrix[3][2]
+ m_matrix[0][2]*m_matrix[2][1]*m_matrix[3][3]
+ m_matrix[0][3]*m_matrix[2][2]*m_matrix[3][1]
- m_matrix[0][1]*m_matrix[2][2]*m_matrix[3][3]
- m_matrix[0][2]*m_matrix[2][3]*m_matrix[3][1]
- m_matrix[0][3]*m_matrix[2][1]*m_matrix[3][2];
m_inverse[0][2] = m_matrix[0][1]*m_matrix[1][2]*m_matrix[3][3]
+ m_matrix[0][2]*m_matrix[1][3]*m_matrix[3][1]
+ m_matrix[0][3]*m_matrix[1][1]*m_matrix[3][2]
- m_matrix[0][1]*m_matrix[1][3]*m_matrix[3][2]
- m_matrix[0][2]*m_matrix[1][1]*m_matrix[3][3]
- m_matrix[0][3]*m_matrix[1][2]*m_matrix[3][1];
m_inverse[0][3] = m_matrix[0][1]*m_matrix[1][3]*m_matrix[2][2]
+ m_matrix[0][2]*m_matrix[1][1]*m_matrix[2][3]
+ m_matrix[0][3]*m_matrix[1][2]*m_matrix[2][1]
- m_matrix[0][1]*m_matrix[1][2]*m_matrix[2][3]
- m_matrix[0][2]*m_matrix[1][3]*m_matrix[2][1]
- m_matrix[0][3]*m_matrix[1][1]*m_matrix[2][2];
m_inverse[1][0] = m_matrix[1][0]*m_matrix[2][3]*m_matrix[3][2]
+ m_matrix[1][2]*m_matrix[2][0]*m_matrix[3][3]
+ m_matrix[1][3]*m_matrix[2][2]*m_matrix[3][0]
- m_matrix[1][0]*m_matrix[2][2]*m_matrix[3][3]
- m_matrix[1][2]*m_matrix[2][3]*m_matrix[3][0]
- m_matrix[1][3]*m_matrix[2][0]*m_matrix[3][2];
m_inverse[1][1] = m_matrix[0][0]*m_matrix[2][2]*m_matrix[3][3]
+ m_matrix[0][2]*m_matrix[2][3]*m_matrix[3][0]
+ m_matrix[0][3]*m_matrix[2][0]*m_matrix[3][2]
- m_matrix[0][0]*m_matrix[2][3]*m_matrix[3][2]
- m_matrix[0][2]*m_matrix[2][0]*m_matrix[3][3]
- m_matrix[0][3]*m_matrix[2][2]*m_matrix[3][0];
m_inverse[1][2] = m_matrix[0][0]*m_matrix[1][3]*m_matrix[3][2]
+ m_matrix[0][2]*m_matrix[1][0]*m_matrix[3][3]
+ m_matrix[0][3]*m_matrix[1][2]*m_matrix[3][0]
- m_matrix[0][0]*m_matrix[1][2]*m_matrix[3][3]
- m_matrix[0][2]*m_matrix[1][3]*m_matrix[3][0]
- m_matrix[0][3]*m_matrix[1][0]*m_matrix[3][2];
m_inverse[1][3] = m_matrix[0][0]*m_matrix[1][2]*m_matrix[2][3]
+ m_matrix[0][2]*m_matrix[1][3]*m_matrix[2][0]
+ m_matrix[0][3]*m_matrix[1][0]*m_matrix[2][2]
- m_matrix[0][0]*m_matrix[1][3]*m_matrix[2][2]
- m_matrix[0][2]*m_matrix[1][0]*m_matrix[2][3]
- m_matrix[0][3]*m_matrix[1][2]*m_matrix[2][0];
m_inverse[2][0] = m_matrix[1][0]*m_matrix[2][1]*m_matrix[3][3]
+ m_matrix[1][1]*m_matrix[2][3]*m_matrix[3][0]
+ m_matrix[1][3]*m_matrix[2][0]*m_matrix[3][1]
- m_matrix[1][0]*m_matrix[2][3]*m_matrix[3][1]
- m_matrix[1][1]*m_matrix[2][0]*m_matrix[3][3]
- m_matrix[1][3]*m_matrix[2][1]*m_matrix[3][0];
m_inverse[2][1] = m_matrix[0][0]*m_matrix[2][3]*m_matrix[3][1]
+ m_matrix[0][1]*m_matrix[2][0]*m_matrix[3][3]
+ m_matrix[0][3]*m_matrix[2][1]*m_matrix[3][0]
- m_matrix[0][0]*m_matrix[2][1]*m_matrix[3][3]
- m_matrix[0][1]*m_matrix[2][3]*m_matrix[3][0]
- m_matrix[0][3]*m_matrix[2][0]*m_matrix[3][1];
m_inverse[2][2] = m_matrix[0][0]*m_matrix[1][1]*m_matrix[3][3]
+ m_matrix[0][1]*m_matrix[1][3]*m_matrix[3][0]
+ m_matrix[0][3]*m_matrix[1][0]*m_matrix[3][1]
- m_matrix[0][0]*m_matrix[1][3]*m_matrix[3][1]
- m_matrix[0][1]*m_matrix[1][0]*m_matrix[3][3]
- m_matrix[0][3]*m_matrix[1][1]*m_matrix[3][0];
m_inverse[2][3] = m_matrix[0][0]*m_matrix[1][3]*m_matrix[2][1]
+ m_matrix[0][1]*m_matrix[1][0]*m_matrix[2][3]
+ m_matrix[0][3]*m_matrix[1][1]*m_matrix[2][0]
- m_matrix[0][0]*m_matrix[1][1]*m_matrix[2][3]
- m_matrix[0][1]*m_matrix[1][3]*m_matrix[2][0]
- m_matrix[0][3]*m_matrix[1][0]*m_matrix[2][1];
m_inverse[3][0] = m_matrix[1][0]*m_matrix[2][2]*m_matrix[3][1]
+ m_matrix[1][1]*m_matrix[2][0]*m_matrix[3][2]
+ m_matrix[1][2]*m_matrix[2][1]*m_matrix[3][0]
- m_matrix[1][0]*m_matrix[2][1]*m_matrix[3][2]
- m_matrix[1][1]*m_matrix[2][2]*m_matrix[3][0]
- m_matrix[1][2]*m_matrix[2][0]*m_matrix[3][1];
m_inverse[3][1] = m_matrix[0][0]*m_matrix[2][1]*m_matrix[3][2]
+ m_matrix[0][1]*m_matrix[2][2]*m_matrix[3][0]
+ m_matrix[0][2]*m_matrix[2][0]*m_matrix[3][1]
- m_matrix[0][0]*m_matrix[2][2]*m_matrix[3][1]
- m_matrix[0][1]*m_matrix[2][0]*m_matrix[3][2]
- m_matrix[0][2]*m_matrix[2][1]*m_matrix[3][0];
m_inverse[3][2] = m_matrix[0][0]*m_matrix[1][2]*m_matrix[3][1]
+ m_matrix[0][1]*m_matrix[1][0]*m_matrix[3][2]
+ m_matrix[0][2]*m_matrix[1][1]*m_matrix[3][0]
- m_matrix[0][0]*m_matrix[1][1]*m_matrix[3][2]
- m_matrix[0][1]*m_matrix[1][2]*m_matrix[3][0]
- m_matrix[0][2]*m_matrix[1][0]*m_matrix[3][1];
m_inverse[3][3] = m_matrix[0][0]*m_matrix[1][1]*m_matrix[2][2]
+ m_matrix[0][1]*m_matrix[1][2]*m_matrix[2][0]
+ m_matrix[0][2]*m_matrix[1][0]*m_matrix[2][1]
- m_matrix[0][0]*m_matrix[1][2]*m_matrix[2][1]
- m_matrix[0][1]*m_matrix[1][0]*m_matrix[2][2]
- m_matrix[0][2]*m_matrix[1][1]*m_matrix[2][0];
m_inverse[0][0] = m_matrix[1][1] * m_matrix[2][2] * m_matrix[3][3]
+ m_matrix[1][2] * m_matrix[2][3] * m_matrix[3][1]
+ m_matrix[1][3] * m_matrix[2][1] * m_matrix[3][2]
- m_matrix[1][1] * m_matrix[2][3] * m_matrix[3][2]
- m_matrix[1][2] * m_matrix[2][1] * m_matrix[3][3]
- m_matrix[1][3] * m_matrix[2][2] * m_matrix[3][1];
m_inverse[0][1] = m_matrix[0][1] * m_matrix[2][3] * m_matrix[3][2]
+ m_matrix[0][2] * m_matrix[2][1] * m_matrix[3][3]
+ m_matrix[0][3] * m_matrix[2][2] * m_matrix[3][1]
- m_matrix[0][1] * m_matrix[2][2] * m_matrix[3][3]
- m_matrix[0][2] * m_matrix[2][3] * m_matrix[3][1]
- m_matrix[0][3] * m_matrix[2][1] * m_matrix[3][2];
m_inverse[0][2] = m_matrix[0][1] * m_matrix[1][2] * m_matrix[3][3]
+ m_matrix[0][2] * m_matrix[1][3] * m_matrix[3][1]
+ m_matrix[0][3] * m_matrix[1][1] * m_matrix[3][2]
- m_matrix[0][1] * m_matrix[1][3] * m_matrix[3][2]
- m_matrix[0][2] * m_matrix[1][1] * m_matrix[3][3]
- m_matrix[0][3] * m_matrix[1][2] * m_matrix[3][1];
m_inverse[0][3] = m_matrix[0][1] * m_matrix[1][3] * m_matrix[2][2]
+ m_matrix[0][2] * m_matrix[1][1] * m_matrix[2][3]
+ m_matrix[0][3] * m_matrix[1][2] * m_matrix[2][1]
- m_matrix[0][1] * m_matrix[1][2] * m_matrix[2][3]
- m_matrix[0][2] * m_matrix[1][3] * m_matrix[2][1]
- m_matrix[0][3] * m_matrix[1][1] * m_matrix[2][2];
m_inverse[1][0] = m_matrix[1][0] * m_matrix[2][3] * m_matrix[3][2]
+ m_matrix[1][2] * m_matrix[2][0] * m_matrix[3][3]
+ m_matrix[1][3] * m_matrix[2][2] * m_matrix[3][0]
- m_matrix[1][0] * m_matrix[2][2] * m_matrix[3][3]
- m_matrix[1][2] * m_matrix[2][3] * m_matrix[3][0]
- m_matrix[1][3] * m_matrix[2][0] * m_matrix[3][2];
m_inverse[1][1] = m_matrix[0][0] * m_matrix[2][2] * m_matrix[3][3]
+ m_matrix[0][2] * m_matrix[2][3] * m_matrix[3][0]
+ m_matrix[0][3] * m_matrix[2][0] * m_matrix[3][2]
- m_matrix[0][0] * m_matrix[2][3] * m_matrix[3][2]
- m_matrix[0][2] * m_matrix[2][0] * m_matrix[3][3]
- m_matrix[0][3] * m_matrix[2][2] * m_matrix[3][0];
m_inverse[1][2] = m_matrix[0][0] * m_matrix[1][3] * m_matrix[3][2]
+ m_matrix[0][2] * m_matrix[1][0] * m_matrix[3][3]
+ m_matrix[0][3] * m_matrix[1][2] * m_matrix[3][0]
- m_matrix[0][0] * m_matrix[1][2] * m_matrix[3][3]
- m_matrix[0][2] * m_matrix[1][3] * m_matrix[3][0]
- m_matrix[0][3] * m_matrix[1][0] * m_matrix[3][2];
m_inverse[1][3] = m_matrix[0][0] * m_matrix[1][2] * m_matrix[2][3]
+ m_matrix[0][2] * m_matrix[1][3] * m_matrix[2][0]
+ m_matrix[0][3] * m_matrix[1][0] * m_matrix[2][2]
- m_matrix[0][0] * m_matrix[1][3] * m_matrix[2][2]
- m_matrix[0][2] * m_matrix[1][0] * m_matrix[2][3]
- m_matrix[0][3] * m_matrix[1][2] * m_matrix[2][0];
m_inverse[2][0] = m_matrix[1][0] * m_matrix[2][1] * m_matrix[3][3]
+ m_matrix[1][1] * m_matrix[2][3] * m_matrix[3][0]
+ m_matrix[1][3] * m_matrix[2][0] * m_matrix[3][1]
- m_matrix[1][0] * m_matrix[2][3] * m_matrix[3][1]
- m_matrix[1][1] * m_matrix[2][0] * m_matrix[3][3]
- m_matrix[1][3] * m_matrix[2][1] * m_matrix[3][0];
m_inverse[2][1] = m_matrix[0][0] * m_matrix[2][3] * m_matrix[3][1]
+ m_matrix[0][1] * m_matrix[2][0] * m_matrix[3][3]
+ m_matrix[0][3] * m_matrix[2][1] * m_matrix[3][0]
- m_matrix[0][0] * m_matrix[2][1] * m_matrix[3][3]
- m_matrix[0][1] * m_matrix[2][3] * m_matrix[3][0]
- m_matrix[0][3] * m_matrix[2][0] * m_matrix[3][1];
m_inverse[2][2] = m_matrix[0][0] * m_matrix[1][1] * m_matrix[3][3]
+ m_matrix[0][1] * m_matrix[1][3] * m_matrix[3][0]
+ m_matrix[0][3] * m_matrix[1][0] * m_matrix[3][1]
- m_matrix[0][0] * m_matrix[1][3] * m_matrix[3][1]
- m_matrix[0][1] * m_matrix[1][0] * m_matrix[3][3]
- m_matrix[0][3] * m_matrix[1][1] * m_matrix[3][0];
m_inverse[2][3] = m_matrix[0][0] * m_matrix[1][3] * m_matrix[2][1]
+ m_matrix[0][1] * m_matrix[1][0] * m_matrix[2][3]
+ m_matrix[0][3] * m_matrix[1][1] * m_matrix[2][0]
- m_matrix[0][0] * m_matrix[1][1] * m_matrix[2][3]
- m_matrix[0][1] * m_matrix[1][3] * m_matrix[2][0]
- m_matrix[0][3] * m_matrix[1][0] * m_matrix[2][1];
m_inverse[3][0] = m_matrix[1][0] * m_matrix[2][2] * m_matrix[3][1]
+ m_matrix[1][1] * m_matrix[2][0] * m_matrix[3][2]
+ m_matrix[1][2] * m_matrix[2][1] * m_matrix[3][0]
- m_matrix[1][0] * m_matrix[2][1] * m_matrix[3][2]
- m_matrix[1][1] * m_matrix[2][2] * m_matrix[3][0]
- m_matrix[1][2] * m_matrix[2][0] * m_matrix[3][1];
m_inverse[3][1] = m_matrix[0][0] * m_matrix[2][1] * m_matrix[3][2]
+ m_matrix[0][1] * m_matrix[2][2] * m_matrix[3][0]
+ m_matrix[0][2] * m_matrix[2][0] * m_matrix[3][1]
- m_matrix[0][0] * m_matrix[2][2] * m_matrix[3][1]
- m_matrix[0][1] * m_matrix[2][0] * m_matrix[3][2]
- m_matrix[0][2] * m_matrix[2][1] * m_matrix[3][0];
m_inverse[3][2] = m_matrix[0][0] * m_matrix[1][2] * m_matrix[3][1]
+ m_matrix[0][1] * m_matrix[1][0] * m_matrix[3][2]
+ m_matrix[0][2] * m_matrix[1][1] * m_matrix[3][0]
- m_matrix[0][0] * m_matrix[1][1] * m_matrix[3][2]
- m_matrix[0][1] * m_matrix[1][2] * m_matrix[3][0]
- m_matrix[0][2] * m_matrix[1][0] * m_matrix[3][1];
m_inverse[3][3] = m_matrix[0][0] * m_matrix[1][1] * m_matrix[2][2]
+ m_matrix[0][1] * m_matrix[1][2] * m_matrix[2][0]
+ m_matrix[0][2] * m_matrix[1][0] * m_matrix[2][1]
- m_matrix[0][0] * m_matrix[1][2] * m_matrix[2][1]
- m_matrix[0][1] * m_matrix[1][0] * m_matrix[2][2]
- m_matrix[0][2] * m_matrix[1][1] * m_matrix[2][0];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
@ -244,7 +246,7 @@ std::ostream & operator<<(std::ostream & out, const Matrix & m)
if (j < 3)
out << ", ";
}
out << "]";
out << " ]";
if (i == 3)
out << " ]";
out << std::endl;