///
/// \file TransformationGeometrique.h
/// Mathematiques de l'informatique graphique: Transformation geometrique generique.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

#ifndef ____TRANSFORMATIONGEOMETRIQUE____
#define ____TRANSFORMATIONGEOMETRIQUE____

class CoordonneesHomogenes;

///
/// \class TransformationGeometrique
/// Mathematiques de l'informatique graphique: Transformation geometrique generique.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

class TransformationGeometrique  {

  public :
    double **c;     ///< La matrice des composantes.

  private :
    int n;          ///< La taille de la matrice sous-jacente.

  public :

///
/// Constructeur: Identite en taille n.
/// 
/// @param n La taille.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    TransformationGeometrique(int n);

///
/// Constructeur: Copie depuis un tableau linearise.
/// 
/// @param n La taille.
/// @param t Le tableau en copie.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    TransformationGeometrique(int n,double *t);

///
/// Constructeur: Copie depuis un tableau carre.
/// 
/// @param n La taille.
/// @param t Le tableau carre en copie.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    TransformationGeometrique(int n,double **t);

///
/// Constructeur: Copie depuis une autre TransformationGeometrique.
/// 
/// @param tg La TransformationGeometrique en copie.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    TransformationGeometrique(TransformationGeometrique *tg);

///
/// Destructeur.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    ~TransformationGeometrique(void);

///
/// Impression texte.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    void print(void);

///
/// Composition avec une autre TransformationGeometrique et stockage du resultat dans this.
/// 
/// @param tg La TransformationGeometrique a composer.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    void compose(TransformationGeometrique *tg);

///
/// Composition de deux TransformationGeometrique et stockage du resultat dans this.
/// 
/// @param t1 La premiere TransformationGeometrique a composer.
/// @param t2 La seconde TransformationGeometrique a composer.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    void compose(TransformationGeometrique *t1,TransformationGeometrique *t2);

///
/// Transformation d'une CoordonneesHomogenes par this.
/// 
/// @param ch La CoordonneesHomogenes a transformer par this.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    void transforme(CoordonneesHomogenes *ch);
};

#endif
