*** empty log message ***

This commit is contained in:
Elias Naur 2003-08-12 10:46:53 +00:00
parent 1af7c6ba6d
commit d3c4253619
3 changed files with 154 additions and 133 deletions

View file

@ -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();
}
/**

View file

@ -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;
}
/**

View file

@ -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;
}
/**