/**
 * \file Coord3DD.h
 * Classe de modelisation de positions dans un espace 3 dimensions.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */

#ifndef ____COORD3DD____
#define ____COORD3DD____

class MatriceD;
class Vecte3DD;

/**
 * \class Coord3DD
 * Classe de modelisation de positions dans un espace 3 dimensions.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */

class Coord3DD {

  public :
    double x;       /**< La coordonnee x. */
    double y;       /**< La coordonnee y. */
    double z;       /**< La coordonnee z. */
    double t;       /**< La coordonnee t (coordonnees homogenes). */

  public :

/**
 * Constructeur d'un objet Coord3DD a l'origine (0.0, 0.0, 0.0, 1.0).
 *
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    Coord3DD(void);

/**
 * Constructeur d'un objet Coord3DD.
 *
 * @param x La coordonnee x.
 * @param y La coordonnee y.
 * @param z La coordonnee z.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    Coord3DD(double x,double y,double z);

/**
 * Constructeur d'un objet Coord3DD copie d'un autre objet Coord3DD.
 *
 * @param a L'objet Coord3DD copie.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    Coord3DD(Coord3DD *a);

/**
 * Destructeur d'un objet Coord3DD.
 *
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    ~Coord3DD(void);

    Vecte3DD *newVecteur(Coord3DD *p1,Coord3DD *p2);
    Vecte3DD *newVecteur(Coord3DD *p);
    void soustraction(Coord3DD *v);
    Coord3DD *newProduit(MatriceD *m);
    void produit(MatriceD *m);
    void produit(MatriceD *m,Coord3DD *v);
    double distance(Coord3DD *p);
    void affichage(void);
    void roundXYZ(void);
};

#endif
