@Override final public Matrix3x3 clone() { return new Matrix3x3( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); } }
final private void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); i00 = ( m11 * m22 - m12 * m21 ) / det; i01 = ( m02 * m21 - m01 * m22 ) / det; i02 = ( m01 * m12 - m02 * m11 ) / det; i10 = ( m12 * m20 - m10 * m22 ) / det; i11 = ( m00 * m22 - m02 * m20 ) / det; i12 = ( m02 * m10 - m00 * m12 ) / det; i20 = ( m10 * m21 - m11 * m20 ) / det; i21 = ( m01 * m20 - m00 * m21 ) / det; i22 = ( m00 * m11 - m01 * m10 ) / det; }
Matrix3x3.invert( h1 );
Matrix3x3.invert( h1 );
final private void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); i00 = ( m11 * m22 - m12 * m21 ) / det; i01 = ( m02 * m21 - m01 * m22 ) / det; i02 = ( m01 * m12 - m02 * m11 ) / det; i10 = ( m12 * m20 - m10 * m22 ) / det; i11 = ( m00 * m22 - m02 * m20 ) / det; i12 = ( m02 * m10 - m00 * m12 ) / det; i20 = ( m10 * m21 - m11 * m20 ) / det; i21 = ( m01 * m20 - m00 * m21 ) / det; i22 = ( m00 * m11 - m01 * m10 ) / det; }
@Override final public Matrix3x3 clone() { return new Matrix3x3( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); } }
protected void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) { isInvertible = false; return; } isInvertible = true; final double idet = 1.0 / det; i00 = ( m11 * m22 - m12 * m21 ) * idet; i01 = ( m02 * m21 - m01 * m22 ) * idet; i02 = ( m01 * m12 - m02 * m11 ) * idet; i10 = ( m12 * m20 - m10 * m22 ) * idet; i11 = ( m00 * m22 - m02 * m20 ) * idet; i12 = ( m02 * m10 - m00 * m12 ) * idet; i20 = ( m10 * m21 - m11 * m20 ) * idet; i21 = ( m01 * m20 - m00 * m21 ) * idet; i22 = ( m00 * m11 - m01 * m10 ) * idet; i03 = -i00 * m03 - i01 * m13 - i02 * m23; i13 = -i10 * m03 - i11 * m13 - i12 * m23; i23 = -i20 * m03 - i21 * m13 - i22 * m23; }
protected void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) { isInvertible = false; return; } isInvertible = true; final double idet = 1.0 / det; i00 = ( m11 * m22 - m12 * m21 ) * idet; i01 = ( m02 * m21 - m01 * m22 ) * idet; i02 = ( m01 * m12 - m02 * m11 ) * idet; i10 = ( m12 * m20 - m10 * m22 ) * idet; i11 = ( m00 * m22 - m02 * m20 ) * idet; i12 = ( m02 * m10 - m00 * m12 ) * idet; i20 = ( m10 * m21 - m11 * m20 ) * idet; i21 = ( m01 * m20 - m00 * m21 ) * idet; i22 = ( m00 * m11 - m01 * m10 ) * idet; i03 = -i00 * m03 - i01 * m13 - i02 * m23; i13 = -i10 * m03 - i11 * m13 - i12 * m23; i23 = -i20 * m03 - i21 * m13 - i22 * m23; }
protected void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) { isInvertible = false; return; } isInvertible = true; final double idet = 1.0 / det; i00 = ( m11 * m22 - m12 * m21 ) * idet; i01 = ( m02 * m21 - m01 * m22 ) * idet; i02 = ( m01 * m12 - m02 * m11 ) * idet; i10 = ( m12 * m20 - m10 * m22 ) * idet; i11 = ( m00 * m22 - m02 * m20 ) * idet; i12 = ( m02 * m10 - m00 * m12 ) * idet; i20 = ( m10 * m21 - m11 * m20 ) * idet; i21 = ( m01 * m20 - m00 * m21 ) * idet; i22 = ( m00 * m11 - m01 * m10 ) * idet; i03 = -i00 * m03 - i01 * m13 - i02 * m23; i13 = -i10 * m03 - i11 * m13 - i12 * m23; i23 = -i20 * m03 - i21 * m13 - i22 * m23; }
protected void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) { isInvertible = false; return; } isInvertible = true; final double idet = 1.0 / det; i00 = ( m11 * m22 - m12 * m21 ) * idet; i01 = ( m02 * m21 - m01 * m22 ) * idet; i02 = ( m01 * m12 - m02 * m11 ) * idet; i10 = ( m12 * m20 - m10 * m22 ) * idet; i11 = ( m00 * m22 - m02 * m20 ) * idet; i12 = ( m02 * m10 - m00 * m12 ) * idet; i20 = ( m10 * m21 - m11 * m20 ) * idet; i21 = ( m01 * m20 - m00 * m21 ) * idet; i22 = ( m00 * m11 - m01 * m10 ) * idet; i03 = -i00 * m03 - i01 * m13 - i02 * m23; i13 = -i10 * m03 - i11 * m13 - i12 * m23; i23 = -i20 * m03 - i21 * m13 - i22 * m23; }
protected void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) { isInvertible = false; return; } isInvertible = true; final double idet = 1.0 / det; i00 = ( m11 * m22 - m12 * m21 ) * idet; i01 = ( m02 * m21 - m01 * m22 ) * idet; i02 = ( m01 * m12 - m02 * m11 ) * idet; i10 = ( m12 * m20 - m10 * m22 ) * idet; i11 = ( m00 * m22 - m02 * m20 ) * idet; i12 = ( m02 * m10 - m00 * m12 ) * idet; i20 = ( m10 * m21 - m11 * m20 ) * idet; i21 = ( m01 * m20 - m00 * m21 ) * idet; i22 = ( m00 * m11 - m01 * m10 ) * idet; i03 = -i00 * m03 - i01 * m13 - i02 * m23; i13 = -i10 * m03 - i11 * m13 - i12 * m23; i23 = -i20 * m03 - i21 * m13 - i22 * m23; }
protected void invert() { final double det = Matrix3x3.det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) { isInvertible = false; return; } isInvertible = true; final double idet = 1.0 / det; i00 = ( m11 * m22 - m12 * m21 ) * idet; i01 = ( m02 * m21 - m01 * m22 ) * idet; i02 = ( m01 * m12 - m02 * m11 ) * idet; i10 = ( m12 * m20 - m10 * m22 ) * idet; i11 = ( m00 * m22 - m02 * m20 ) * idet; i12 = ( m02 * m10 - m00 * m12 ) * idet; i20 = ( m10 * m21 - m11 * m20 ) * idet; i21 = ( m01 * m20 - m00 * m21 ) * idet; i22 = ( m00 * m11 - m01 * m10 ) * idet; i03 = -i00 * m03 - i01 * m13 - i02 * m23; i13 = -i10 * m03 - i11 * m13 - i12 * m23; i23 = -i20 * m03 - i21 * m13 - i22 * m23; }
final static public double[] createInverse( final double m00, final double m01, final double m02, final double m10, final double m11, final double m12, final double m20, final double m21, final double m22 ) throws NoninvertibleModelException { final double det = det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); return new double[]{ ( m11 * m22 - m12 * m21 ) / det, ( m02 * m21 - m01 * m22 ) / det, ( m01 * m12 - m02 * m11 ) / det, ( m12 * m20 - m10 * m22 ) / det, ( m00 * m22 - m02 * m20 ) / det, ( m02 * m10 - m00 * m12 ) / det, ( m10 * m21 - m11 * m20 ) / det, ( m01 * m20 - m00 * m21 ) / det, ( m00 * m11 - m01 * m10 ) / det }; }
final static public float[] createInverse( final float m00, final float m01, final float m02, final float m10, final float m11, final float m12, final float m20, final float m21, final float m22 ) throws NoninvertibleModelException { final float det = det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); return new float[]{ ( m11 * m22 - m12 * m21 ) / det, ( m02 * m21 - m01 * m22 ) / det, ( m01 * m12 - m02 * m11 ) / det, ( m12 * m20 - m10 * m22 ) / det, ( m00 * m22 - m02 * m20 ) / det, ( m02 * m10 - m00 * m12 ) / det, ( m10 * m21 - m11 * m20 ) / det, ( m01 * m20 - m00 * m21 ) / det, ( m00 * m11 - m01 * m10 ) / det }; }
final static public double[] createInverse( final double m00, final double m01, final double m02, final double m10, final double m11, final double m12, final double m20, final double m21, final double m22 ) throws NoninvertibleModelException { final double det = det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); return new double[]{ ( m11 * m22 - m12 * m21 ) / det, ( m02 * m21 - m01 * m22 ) / det, ( m01 * m12 - m02 * m11 ) / det, ( m12 * m20 - m10 * m22 ) / det, ( m00 * m22 - m02 * m20 ) / det, ( m02 * m10 - m00 * m12 ) / det, ( m10 * m21 - m11 * m20 ) / det, ( m01 * m20 - m00 * m21 ) / det, ( m00 * m11 - m01 * m10 ) / det }; }
final static public float[] createInverse( final float m00, final float m01, final float m02, final float m10, final float m11, final float m12, final float m20, final float m21, final float m22 ) throws NoninvertibleModelException { final float det = det( m00, m01, m02, m10, m11, m12, m20, m21, m22 ); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); return new float[]{ ( m11 * m22 - m12 * m21 ) / det, ( m02 * m21 - m01 * m22 ) / det, ( m01 * m12 - m02 * m11 ) / det, ( m12 * m20 - m10 * m22 ) / det, ( m00 * m22 - m02 * m20 ) / det, ( m02 * m10 - m00 * m12 ) / det, ( m10 * m21 - m11 * m20 ) / det, ( m01 * m20 - m00 * m21 ) / det, ( m00 * m11 - m01 * m10 ) / det }; }
final static public void invert( final float[] m ) throws NoninvertibleModelException { assert m.length == 9 : "Matrix3x3 supports 3x3 float[][] only."; final float det = det( m ); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); final float i00 = ( m[ 4 ] * m[ 8 ] - m[ 5 ] * m[ 7 ] ) / det; final float i01 = ( m[ 2 ] * m[ 7 ] - m[ 1 ] * m[ 8 ] ) / det; final float i02 = ( m[ 1 ] * m[ 5 ] - m[ 2 ] * m[ 4 ] ) / det; final float i10 = ( m[ 5 ] * m[ 6 ] - m[ 3 ] * m[ 8 ] ) / det; final float i11 = ( m[ 0 ] * m[ 8 ] - m[ 2 ] * m[ 6 ] ) / det; final float i12 = ( m[ 2 ] * m[ 3 ] - m[ 0 ] * m[ 5 ] ) / det; final float i20 = ( m[ 3 ] * m[ 7 ] - m[ 4 ] * m[ 6 ] ) / det; final float i21 = ( m[ 1 ] * m[ 6 ] - m[ 0 ] * m[ 7 ] ) / det; final float i22 = ( m[ 0 ] * m[ 4 ] - m[ 1 ] * m[ 3 ] ) / det; m[ 0 ] = i00; m[ 1 ] = i01; m[ 2 ] = i02; m[ 3 ] = i10; m[ 4 ] = i11; m[ 5 ] = i12; m[ 6 ] = i20; m[ 7 ] = i21; m[ 8 ] = i22; }
final public void invert() throws NoninvertibleModelException { final double det = det(); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); final double i00 = ( m11 * m22 - m12 * m21 ) / det; final double i01 = ( m02 * m21 - m01 * m22 ) / det; final double i02 = ( m01 * m12 - m02 * m11 ) / det; final double i10 = ( m12 * m20 - m10 * m22 ) / det; final double i11 = ( m00 * m22 - m02 * m20 ) / det; final double i12 = ( m02 * m10 - m00 * m12 ) / det; final double i20 = ( m10 * m21 - m11 * m20 ) / det; final double i21 = ( m01 * m20 - m00 * m21 ) / det; final double i22 = ( m00 * m11 - m01 * m10 ) / det; m00 = i00; m01 = i01; m02 = i02; m10 = i10; m11 = i11; m12 = i12; m20 = i20; m21 = i21; m22 = i22; }
final static public void invert( final double[] m ) throws NoninvertibleModelException { assert m.length == 9 : "Matrix3x3 supports 3x3 double[][] only."; final double det = det( m ); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); final double i00 = ( m[ 4 ] * m[ 8 ] - m[ 5 ] * m[ 7 ] ) / det; final double i01 = ( m[ 2 ] * m[ 7 ] - m[ 1 ] * m[ 8 ] ) / det; final double i02 = ( m[ 1 ] * m[ 5 ] - m[ 2 ] * m[ 4 ] ) / det; final double i10 = ( m[ 5 ] * m[ 6 ] - m[ 3 ] * m[ 8 ] ) / det; final double i11 = ( m[ 0 ] * m[ 8 ] - m[ 2 ] * m[ 6 ] ) / det; final double i12 = ( m[ 2 ] * m[ 3 ] - m[ 0 ] * m[ 5 ] ) / det; final double i20 = ( m[ 3 ] * m[ 7 ] - m[ 4 ] * m[ 6 ] ) / det; final double i21 = ( m[ 1 ] * m[ 6 ] - m[ 0 ] * m[ 7 ] ) / det; final double i22 = ( m[ 0 ] * m[ 4 ] - m[ 1 ] * m[ 3 ] ) / det; m[ 0 ] = i00; m[ 1 ] = i01; m[ 2 ] = i02; m[ 3 ] = i10; m[ 4 ] = i11; m[ 5 ] = i12; m[ 6 ] = i20; m[ 7 ] = i21; m[ 8 ] = i22; }
final public void invert() throws NoninvertibleModelException { final double det = det(); if ( det == 0 ) throw new NoninvertibleModelException( "Matrix not invertible." ); final double i00 = ( m11 * m22 - m12 * m21 ) / det; final double i01 = ( m02 * m21 - m01 * m22 ) / det; final double i02 = ( m01 * m12 - m02 * m11 ) / det; final double i10 = ( m12 * m20 - m10 * m22 ) / det; final double i11 = ( m00 * m22 - m02 * m20 ) / det; final double i12 = ( m02 * m10 - m00 * m12 ) / det; final double i20 = ( m10 * m21 - m11 * m20 ) / det; final double i21 = ( m01 * m20 - m00 * m21 ) / det; final double i22 = ( m00 * m11 - m01 * m10 ) / det; m00 = i00; m01 = i01; m02 = i02; m10 = i10; m11 = i11; m12 = i12; m20 = i20; m21 = i21; m22 = i22; }