#ifndef ____MATRICED____
#define ____MATRICED____

class Coord3DD;
class Vecte3DD;

class MatriceD {

  public :
    double m[4][4];

  public :
    MatriceD(void);
    MatriceD(double t[16]);
    ~MatriceD(void);

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

#endif
