vector.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #ifndef _vector_h_
  2. #define _vector_h_
  3. #include "../Object/point.h"
  4. #include "../Object/rectangle.h"
  5. class CScale;
  6. class CVector
  7. {
  8. public:
  9. void Update (void); // mise à jour des variables membres lorsque l'un des points
  10. // du vecteur est modifie
  11. Point m_pt1, // premier point du vecteur (pour l'orientation)
  12. m_pt2; // deuxieme point du vecteur
  13. long m_dwSize; // nombre de points requis pour tracer une droite continue
  14. CVector(void);
  15. CVector(const Point &, const Point &);
  16. CVector(int, int, int, int);
  17. inline CVector(const CVector &vSource) { *this = vSource; };
  18. Point operator [] (long) const;
  19. const CVector &operator = (const CVector & );
  20. inline long operator * (const CVector &v) const { return (v.m_lDeltaX * m_lDeltaX) + (v.m_lDeltaY * m_lDeltaY); }
  21. inline long Length(void) const { return (m_dwSize); };// = max(dx, dy) = (dx^n+dy^n)^(1/n) avec n=infini (distance euclidienne n=2, distance de manhatan n=1) [JAK - 21/1/2003]
  22. inline bool Nul(void) const { return (m_dwSize == 0); };
  23. inline const Point& StartPoint(void) const { return (m_pt1); };
  24. inline const Point& EndPoint(void) const { return (m_pt2); };
  25. inline void SetStartPoint(const Point &pt) { m_pt1 = pt; Update (); };
  26. inline void SetEndPoint(const Point &pt) { m_pt2 = pt; Update (); };
  27. inline void OffsetVector(long x, long y) { m_pt1.Offset (x, y); m_pt2.Offset (x, y); }
  28. inline double Norm(void) const { return (m_dblNorm); };
  29. double Norm(const CScale*) const;
  30. bool PointInVector(const Point &) const;
  31. bool PointOnLine(const Point &) const;
  32. double Angle(const Point &) const;
  33. CVector Orthogonal(const Point &, const Point &) const; // vecteur orthogonal partant du 1er point vers le 2eme point
  34. CVector Orthogonal(const Point &, unsigned int) const; // vecteur orthogonal partant du point dans le sens donne
  35. // vecteur orthogonal par le projete orthogonal du point sur le vecteur
  36. inline CVector Orthogonal (const Point &pt) const { return CVector(Projected(pt), pt); }
  37. Point Projected(const Point &) const; // projete orthogonal du point sur le vecteur
  38. void SetLength(long);
  39. void Mask(const Rect &);
  40. long PosFromPoint(const Point &) const; // retourne la position ESTIMEE d'un point sur
  41. // la droite. Cela ne veut pas dire qu'il
  42. // fait partie de la droite
  43. void MoveTo(const Point &ptNewStart);
  44. // Deplace
  45. bool m_fHorizontal; // variations horizontale/verticale la moins importante
  46. protected:
  47. long m_lDeltaX; // variation en abscisse
  48. long m_lDeltaY; // variation en ordonnee
  49. double m_dblNorm; // norme du vecteur en pixels
  50. };
  51. #endif