///
/// \file Direction2D.h
/// Mathematiques de l'informatique graphique: Direction 2D
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

#ifndef ____DIRECTION2D____
#define ____DIRECTION2D____

class Position2D;

#include "CoordonneesHomogenes2D.h"

///
/// \class Direction2D
/// Mathematiques de l'informatique graphique: Direction 2D
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

class Direction2D : public CoordonneesHomogenes2D {

  public :

///
/// Constructeur sans parametre.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Direction2D(void);

///
/// Constructeur avec parametres.
///
/// @param x La coordonnee x.
/// @param y La coordonnee y.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Direction2D(double x,double y);

///
/// Constructeur par clonage.
///
/// @param c La Direction2D a cloner.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Direction2D(Direction2D *c);

///
/// Constructeur par calcul de la direction define par 2 positions.
///
/// @param p1 La Position2D initiale.
/// @param p2 La Position2D finale.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    Direction2D(Position2D *p1,Position2D *p2);

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

///
/// Calcul de la norme.
///
/// @return La norme.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    double norme(void);

///
/// Normalisation.
///
/// @return La norme.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    double normalisation(void);

///
/// Calcul du produit scalaire.
///
/// @param d La Direction2D avec laquelle calculer le produit scalaire.
/// @return Le produit scalaire.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    double produitScalaire(Direction2D *d);
};

#endif
