/**
 * \file Coord3D.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 ____COORD3D____
#define ____COORD3D____

class Matrice;
class Vecte3D;

/**
 * \class Coord3D
 * 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 Coord3D {

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

  public :

/**
 * Constructeur d'un objet Coord3D 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
 */
    Coord3D(void);

/**
 * Constructeur d'un objet Coord3D.
 *
 * @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
 */
    Coord3D(float x,float y,float z);

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

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

    Vecte3D *newVecteur(Coord3D *p1,Coord3D *p2);
    Vecte3D *newVecteur(Coord3D *p);
    void soustraction(Coord3D *v);
    Coord3D *newProduit(Matrice *m);
    void produit(Matrice *m);
    void produit(Matrice *m,Coord3D *v);
    float distance(Coord3D *p);
    void affichage(void);
    void roundXYZ(void);
};

#endif
