public class Matrice33 { public float m00, m01, m02; public float m10, m11, m12; public float m20, m21, m22; public Matrice33() { set(1, 0, 0, 0, 1, 0, 0, 0, 1); } public Matrice33(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22 ) { set(m00, m01, m02, m10, m11, m12, m20, m21, m22 ); } public void reset() { set(1, 0, 0, 0, 1, 0, 0, 0, 1); } public void set(Matrice33 src) { set(src.m00, src.m01, src.m02, src.m10, src.m11, src.m12, src.m20, src.m21, src.m22); } public void set(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22 ) { this.m00 = m00; this.m01 = m01; this.m02 = m02; this.m10 = m10; this.m11 = m11; this.m12 = m12; this.m20 = m20; this.m21 = m21; this.m22 = m22; } public Matrice33 mul(Matrice33 droite) { float r00 = m00*droite.m00 + m01*droite.m10 + m02*droite.m20 ; float r01 = m00*droite.m01 + m01*droite.m11 + m02*droite.m21 ; float r02 = m00*droite.m02 + m01*droite.m12 + m02*droite.m22 ; float r10 = m10*droite.m00 + m11*droite.m10 + m12*droite.m20 ; float r11 = m10*droite.m01 + m11*droite.m11 + m12*droite.m21 ; float r12 = m10*droite.m02 + m11*droite.m12 + m12*droite.m22 ; float r20 = m20*droite.m00 + m21*droite.m10 + m22*droite.m20 ; float r21 = m20*droite.m01 + m21*droite.m11 + m22*droite.m21 ; float r22 = m20*droite.m02 + m21*droite.m12 + m22*droite.m22 ; return new Matrice33( r00, r01, r02 , r10, r11, r12, r20, r21, r22); } public Vecteur applyVecteur(Vecteur vec) { float tmpx = m00*vec.x + m01*vec.y + m02*vec.z ; float tmpy = m10*vec.x + m11*vec.y + m12*vec.z; float tmpz = m20*vec.x + m21*vec.y + m22*vec.z ; return new Vecteur(tmpx,tmpy,tmpz); } public float determinant() { float res= m00*(m11*m22 - m12 * m21)+ m01 * (m12 * m20 - m10 * m22) + m02 * (m10 * m21 - m11 * m20); return res; } public Matrice33 transpose() { Matrice33 t=new Matrice33(); t.m00=m00; t.m10= m01; t.m01 = m10; t.m11=m11; t.m20 = m02; t.m02 = m20; t.m22=m22; t.m21 = m12; t.m12 = m21; return t; } public Matrice33 invert() { float determinant = determinant(); if (determinant != 0) { Matrice33 res=new Matrice33(); float inv_D = 1f / determinant; // first row res.m00 = ( m11*m22-m12*m21)*inv_D; res.m01 = (-m10*m22+m12* m20)*inv_D; res.m02 = (m10* m21- m11* m20)*inv_D; // second row res.m10 =(-m01* m22+ m02*m21)*inv_D; res.m11 = ( m00*m22- m02*m20)*inv_D; res.m12 = (-m00*m21+ m01* m20)*inv_D; // third row res.m20 = ( m01 * m12 - m02 * m11) *inv_D; res.m21 = (-m00 * m12 + m02 * m10)*inv_D; res.m22 = ( m00 * m11 - m01 * m10)*inv_D; return res.transpose(); } return null; } /* public void printmat(String s, Matrice33 t) { println(s); println( t.m00+ " " + t.m01+ " " + t.m02+ " " ); println(t.m10+ " " + t.m11+ " " + t.m12+ " " ); println(t.m20+ " " + t.m21+ " " + t.m22+ " " ); println(); } */ }//Fin de Matrice33