Matrix.getDeterminant() might contain a typo.
In the function
public final double getDeterminant()
{
double result = 0.0;
// Columns 2, 3, 4.
result += this.m11 *
(this.m22 * (this.m33 * this.m44 - this.m43 * this.m34)
- this.m23 * (this.m32 * this.m44 - this.m42 * this.m34)
+ this.m24 * (this.m32 * this.m43 - this.m42 * this.m33));
// Columns 1, 3, 4.
result -= this.m12 *
(this.m21 * (this.m33 * this.m44 - this.m43 * this.m34)
- this.m23 * (this.m31 * this.m44 - this.m41 * this.m34)
+ this.m24 * (this.m31 * this.m43 - this.m41 * this.m33));
// Columns 1, 2, 4.
result += this.m13 *
(this.m21 * (this.m32 * this.m44 - this.m42 * this.m34)
- this.m22 * (this.m31 * this.m44 - this.m41 * this.m34)
+ this.m24 * (this.m31 * this.m42 - this.m41 * this.m32));
// Columns 1, 2, 3.
result -= this.m14 *
(this.m21 * (this.m32 * this.m43 - this.m42 - this.m33)
- this.m22 * (this.m31 * this.m43 - this.m41 * this.m33)
+ this.m23 * (this.m31 * this.m42 - this.m41 * this.m32));
return result;
}
The last line containing
// Columns 1, 2, 3.
result -= this.m14 *
(this.m21 * (this.m32 * this.m43 - this.m42 - this.m33)
- this.m22 * (this.m31 * this.m43 - this.m41 * this.m33)
+ this.m23 * (this.m31 * this.m42 - this.m41 * this.m32));
should probably read like the following:
// Columns 1, 2, 3.
result -= this.m14 *
(this.m21 * (this.m32 * this.m43 - this.m42 * this.m33)
- this.m22 * (this.m31 * this.m43 - this.m41 * this.m33)
+ this.m23 * (this.m31 * this.m42 - this.m41 * this.m32));
A problem causes by this is that the determinant of a Matrix is not equal to the determinant of the Matrix's transpose. This can be verified by, e.g., running the following
Matrix m1 = new Matrix( 1, 0, 0, 1,
1, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1);
System.out.println(m1.getDeterminant());
System.out.println(m1.getTranspose().getDeterminant());
Found with M. Moeller while debugging some related issues and noticing that the determinant differs from apache.commons.math
Matrix.getDeterminant() might contain a typo.
In the function
The last line containing
should probably read like the following:
A problem causes by this is that the determinant of a Matrix is not equal to the determinant of the Matrix's transpose. This can be verified by, e.g., running the following
Found with M. Moeller while debugging some related issues and noticing that the determinant differs from apache.commons.math