From d3c4253619fb072ad865b6c8fa88040bd0f38bd4 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 12 Aug 2003 10:46:53 +0000 Subject: [PATCH] *** empty log message *** --- src/java/org/lwjgl/vector/Matrix2f.java | 50 ++++---- src/java/org/lwjgl/vector/Matrix3f.java | 87 ++++++++------ src/java/org/lwjgl/vector/Matrix4f.java | 150 ++++++++++++------------ 3 files changed, 154 insertions(+), 133 deletions(-) diff --git a/src/java/org/lwjgl/vector/Matrix2f.java b/src/java/org/lwjgl/vector/Matrix2f.java index cafc0c07..c6bfe33c 100644 --- a/src/java/org/lwjgl/vector/Matrix2f.java +++ b/src/java/org/lwjgl/vector/Matrix2f.java @@ -294,27 +294,37 @@ public class Matrix2f extends Matrix implements Serializable { * @return this if successful, null otherwise */ public Matrix invert() - { + { - /* - inv(A) = 1/det(A) * adj(A); - */ - - float determinant = determinant(); - if (determinant != 0) { - float determinant_inv = 1f/determinant; - float t00 = m11*determinant_inv; - float t01 = -m01*determinant_inv; - float t11 = m00*determinant_inv; - float t10 = -m10*determinant_inv; - - m00 = t00; - m01 = t01; - m10 = t10; - m11 = t11; - return this; - } else - return null; + /* + *inv(A) = 1/det(A) * adj(A); + */ + + float determinant = determinant(); + if (determinant != 0) { + float determinant_inv = 1f/determinant; + float t00 = m11*determinant_inv; + float t01 = -m01*determinant_inv; + float t11 = m00*determinant_inv; + float t10 = -m10*determinant_inv; + + m00 = t00; + m01 = t01; + m10 = t10; + m11 = t11; + return this; + } else + return null; + } + + /** + * Returns a string representation of this matrix + */ + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append(m00).append(' ').append(m10).append(' ').append('\n'); + buf.append(m01).append(' ').append(m11).append(' ').append('\n'); + return buf.toString(); } /** diff --git a/src/java/org/lwjgl/vector/Matrix3f.java b/src/java/org/lwjgl/vector/Matrix3f.java index 6297b2e6..30d679bf 100644 --- a/src/java/org/lwjgl/vector/Matrix3f.java +++ b/src/java/org/lwjgl/vector/Matrix3f.java @@ -362,50 +362,61 @@ public class Matrix3f extends Matrix implements Serializable { return f; } + /** + * Returns a string representation of this matrix + */ + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append(m00).append(' ').append(m10).append(' ').append(m20).append(' ').append('\n'); + buf.append(m01).append(' ').append(m11).append(' ').append(m21).append(' ').append('\n'); + buf.append(m02).append(' ').append(m12).append(' ').append(m22).append(' ').append('\n'); + return buf.toString(); + } + /** * Invert this matrix * @return this if successful, null otherwise */ public Matrix invert() - { + { float determinant = determinant(); - - if (determinant != 0) - { - // do it the ordinary way - - /* inv(A) = 1/det(A) * adj(T), where adj(T) = transpose(Conjugate Matrix) - - m00 m01 m02 - m10 m11 m12 - m20 m21 m22 - */ - float determinant_inv = 1f/determinant; - - // get the conjugate matrix - float t00 = m11 * m22 - m12* m22; - float t01 = - m10 * m22 + m12 *m20; - float t02 = m10 * m21 - m11 * m20; - float t10 = - m01 * m22 + m02 * m21; - float t11 = m00 * m22 - m02 * m20; - float t12 = - m00 * m21 + m01 * m20; - float t20 = m01 * m12 - m02 * m11; - float t21 = -m00 * m12 + m02 * m10; - float t22 = m00 * m11 - m01 * m10; - - - m00 = t00*determinant_inv; - m11 = t11*determinant_inv; - m22 = t22*determinant_inv; - m01 = t10*determinant_inv; - m10 = t01*determinant_inv; - m20 = t02*determinant_inv; - m02 = t20*determinant_inv; - m12 = t21*determinant_inv; - m21 = t12*determinant_inv; - return this; - } else - return null; + + if (determinant != 0) + { + /* do it the ordinary way + * + * inv(A) = 1/det(A) * adj(T), where adj(T) = transpose(Conjugate Matrix) + * + * m00 m01 m02 + * m10 m11 m12 + * m20 m21 m22 + */ + float determinant_inv = 1f/determinant; + + // get the conjugate matrix + float t00 = m11 * m22 - m12* m22; + float t01 = - m10 * m22 + m12 *m20; + float t02 = m10 * m21 - m11 * m20; + float t10 = - m01 * m22 + m02 * m21; + float t11 = m00 * m22 - m02 * m20; + float t12 = - m00 * m21 + m01 * m20; + float t20 = m01 * m12 - m02 * m11; + float t21 = -m00 * m12 + m02 * m10; + float t22 = m00 * m11 - m01 * m10; + + + m00 = t00*determinant_inv; + m11 = t11*determinant_inv; + m22 = t22*determinant_inv; + m01 = t10*determinant_inv; + m10 = t01*determinant_inv; + m20 = t02*determinant_inv; + m02 = t20*determinant_inv; + m12 = t21*determinant_inv; + m21 = t12*determinant_inv; + return this; + } else + return null; } /** diff --git a/src/java/org/lwjgl/vector/Matrix4f.java b/src/java/org/lwjgl/vector/Matrix4f.java index 9cb06311..fe606ca0 100644 --- a/src/java/org/lwjgl/vector/Matrix4f.java +++ b/src/java/org/lwjgl/vector/Matrix4f.java @@ -526,15 +526,15 @@ public class Matrix4f extends Matrix implements Serializable { m21 = m01 * f20 + m11 * f21 + m21 * f22; m22 = m02 * f20 + m12 * f21 + m22 * f22; m23 = m03 * f20 + m13 * f21 + m23 * f22; - m00 = t00; - m01 = t01; - m02 = t02; - m03 = t03; - m10 = t10; - m11 = t11; - m12 = t12; - m13 = t13; - return this; + m00 = t00; + m01 = t01; + m02 = t02; + m03 = t03; + m10 = t10; + m11 = t11; + m12 = t12; + m13 = t13; + return this; } /** @@ -584,7 +584,7 @@ public class Matrix4f extends Matrix implements Serializable { dest.m21 = m01 * f8 + m11 * f9 + m21 * f10; dest.m22 = m02 * f8 + m12 * f9 + m22 * f10; dest.m23 = m03 * f8 + m13 * f9 + m23 * f10; - return dest; + return dest; } /** @@ -687,19 +687,19 @@ public class Matrix4f extends Matrix implements Serializable { return f; } - /** - * Calculate the determinant of a 3x3 matrix - * @return result - */ + /** + * Calculate the determinant of a 3x3 matrix + * @return result + */ - private float determinant3x3(float t00, float t01, float t02, - float t10, float t11, float t12, - float t20, float t21, float t22) - { - return t00 * (t11 * t22 - t12 * t21) - + t01 * (t12 * t20 - t10 * t22) - + t02 * (t10 * t21 - t11 * t20); - } + private float determinant3x3(float t00, float t01, float t02, + float t10, float t11, float t12, + float t20, float t21, float t22) + { + return t00 * (t11 * t22 - t12 * t21) + + t01 * (t12 * t20 - t10 * t22) + + t02 * (t10 * t21 - t11 * t20); + } /** * Invert this matrix @@ -707,59 +707,59 @@ public class Matrix4f extends Matrix implements Serializable { */ public Matrix invert() { - float determinant = determinant(); - - if (determinant != 0) - { - /* - m00 m01 m02 m03 - m10 m11 m12 m13 - m20 m21 m22 m23 - m30 m31 m32 m33 - */ - float determinant_inv = 1f/determinant; - - // first row - float t00 = determinant3x3( m11, m12, m13, m21, m22, m23, m31, m32, m33 ); - float t01 = -determinant3x3(m10, m12, m13, m20, m22, m23, m30, m32, m33 ); - float t02 = determinant3x3( m10, m11, m13, m20, m21, m23, m30, m31, m33 ); - float t03 = -determinant3x3(m10, m11, m12, m20, m21, m22, m30, m31, m32 ); - // second row - float t10 = -determinant3x3(m01, m02, m03, m21, m22, m23, m31, m32, m33 ); - float t11 = determinant3x3( m00, m02, m03, m20, m22, m23, m30, m32, m33 ); - float t12 = -determinant3x3(m00, m01, m03, m20, m21, m23, m30, m31, m33 ); - float t13 = determinant3x3( m00, m01, m02, m20, m21, m22, m30, m31, m32 ); - // third row - float t20 = determinant3x3( m01, m02, m03, m11, m12, m13, m31, m32, m33 ); - float t21 = -determinant3x3(m00, m02, m03, m10, m12, m13, m30, m32, m33 ); - float t22 = determinant3x3( m00, m01, m03, m10, m11, m13, m30, m31, m33 ); - float t23 = -determinant3x3(m00, m01, m02, m10, m11, m12, m30, m31, m32 ); - // fourth row - float t30 = -determinant3x3(m01, m02, m03, m11, m12, m13, m21, m22, m23 ); - float t31 = determinant3x3( m00, m02, m03, m10, m12, m13, m20, m22, m23 ); - float t32 = -determinant3x3(m00, m01, m03, m10, m11, m13, m20, m21, m23 ); - float t33 = determinant3x3( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); - - // transpose and divide by the determinant - m00 = t00*determinant_inv; - m11 = t11*determinant_inv; - m22 = t22*determinant_inv; - m33 = t33*determinant_inv; - m01 = t10*determinant_inv; - m10 = t01*determinant_inv; - m20 = t02*determinant_inv; - m02 = t20*determinant_inv; - m12 = t21*determinant_inv; - m21 = t12*determinant_inv; - m03 = t30*determinant_inv; - m30 = t03*determinant_inv; - m13 = t31*determinant_inv; - m31 = t13*determinant_inv; - m32 = t23*determinant_inv; - m23 = t32*determinant_inv; - return this; - } else - return null; + float determinant = determinant(); + + if (determinant != 0) + { + /* + * m00 m01 m02 m03 + * m10 m11 m12 m13 + * m20 m21 m22 m23 + * m30 m31 m32 m33 + */ + float determinant_inv = 1f/determinant; + + // first row + float t00 = determinant3x3(m11, m12, m13, m21, m22, m23, m31, m32, m33); + float t01 = -determinant3x3(m10, m12, m13, m20, m22, m23, m30, m32, m33); + float t02 = determinant3x3(m10, m11, m13, m20, m21, m23, m30, m31, m33); + float t03 = -determinant3x3(m10, m11, m12, m20, m21, m22, m30, m31, m32); + // second row + float t10 = -determinant3x3(m01, m02, m03, m21, m22, m23, m31, m32, m33); + float t11 = determinant3x3(m00, m02, m03, m20, m22, m23, m30, m32, m33); + float t12 = -determinant3x3(m00, m01, m03, m20, m21, m23, m30, m31, m33); + float t13 = determinant3x3(m00, m01, m02, m20, m21, m22, m30, m31, m32); + // third row + float t20 = determinant3x3(m01, m02, m03, m11, m12, m13, m31, m32, m33); + float t21 = -determinant3x3(m00, m02, m03, m10, m12, m13, m30, m32, m33); + float t22 = determinant3x3(m00, m01, m03, m10, m11, m13, m30, m31, m33); + float t23 = -determinant3x3(m00, m01, m02, m10, m11, m12, m30, m31, m32); + // fourth row + float t30 = -determinant3x3(m01, m02, m03, m11, m12, m13, m21, m22, m23); + float t31 = determinant3x3(m00, m02, m03, m10, m12, m13, m20, m22, m23); + float t32 = -determinant3x3(m00, m01, m03, m10, m11, m13, m20, m21, m23); + float t33 = determinant3x3(m00, m01, m02, m10, m11, m12, m20, m21, m22); + + // transpose and divide by the determinant + m00 = t00*determinant_inv; + m11 = t11*determinant_inv; + m22 = t22*determinant_inv; + m33 = t33*determinant_inv; + m01 = t10*determinant_inv; + m10 = t01*determinant_inv; + m20 = t02*determinant_inv; + m02 = t20*determinant_inv; + m12 = t21*determinant_inv; + m21 = t12*determinant_inv; + m03 = t30*determinant_inv; + m30 = t03*determinant_inv; + m13 = t31*determinant_inv; + m31 = t13*determinant_inv; + m32 = t23*determinant_inv; + m23 = t32*determinant_inv; + return this; + } else + return null; } /**