#ifndef MATRICE
#define MATRICE

class Coord3D;
class Vecte3D;

class Matrice {

  public :
    float m[4][4];

  public :
    Matrice(void);
    Matrice(float t[16]);
    ~Matrice(void);

    void toIdentite(void);
    void toRotationX(float a);
    void toRotationY(float a);
    void toRotationZ(float a);
    void toRotationX(double a);
    void toRotationY(double a);
    void toRotationZ(double a);
    void toRotation(float a,float ax,float ay,float az);
    void toRotationTransposee(float a,float ax,float ay,float az);
    void toRotationXRadian(float a);
    void toRotationYRadian(float a);
    void toRotationZRadian(float a);
    void toRotationXRadian(double a);
    void toRotationYRadian(double a);
    void toRotationZRadian(double a);
    void toRotationRadian(float a,float ax,float ay,float az);
    void toRotationRadianTransposee(float a,float ax,float ay,float az);
    void toTranslation(float tx,float ty,float tz);
    void toTranslation(Coord3D *p);
    void toTranslation(Vecte3D *d);
    void toScale(float rx,float ry,float rz);
    Matrice *newProduit(Matrice *m);
    static Matrice *produitMatriciel(Matrice *m1,Matrice *m2);
    void produit(Matrice *m,Matrice *r);
    void produit(Matrice *r);
    Vecte3D *newProduit(Vecte3D *v);
    void produit(Vecte3D *v,Vecte3D *r);
    void produit(Vecte3D *r);
    Coord3D *newProduit(Coord3D *v);
    void produit(Coord3D *v,Coord3D *r);
    void produit(Coord3D *r);
    void affichage(void);
    void round(void);
};

#endif
