vector.h 2.8 KB

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