| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #ifndef _vector_h_
- #define _vector_h_
- #include "../Object/point.h"
- #include "../Object/rectangle.h"
- class CScale;
-
- class CVector
- {
- public:
-
- void Update (void); // mise à jour des variables membres lorsque l'un des points
- // du vecteur est modifie
- Point m_pt1, // premier point du vecteur (pour l'orientation)
- m_pt2; // deuxieme point du vecteur
- long m_dwSize; // nombre de points requis pour tracer une droite continue
- CVector(void);
- CVector(const Point &, const Point &);
- CVector(int, int, int, int);
- inline CVector(const CVector &vSource) { *this = vSource; };
-
- Point operator [] (long) const;
- const CVector &operator = (const CVector & );
- inline long operator * (const CVector &v) const { return (v.m_lDeltaX * m_lDeltaX) + (v.m_lDeltaY * m_lDeltaY); }
-
- 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]
- inline bool Nul(void) const { return (m_dwSize == 0); };
- inline const Point& StartPoint(void) const { return (m_pt1); };
- inline const Point& EndPoint(void) const { return (m_pt2); };
- inline void SetStartPoint(const Point &pt) { m_pt1 = pt; Update (); };
- inline void SetEndPoint(const Point &pt) { m_pt2 = pt; Update (); };
- inline void OffsetVector(long x, long y) { m_pt1.Offset (x, y); m_pt2.Offset (x, y); }
- inline double Norm(void) const { return (m_dblNorm); };
- double Norm(const CScale*) const;
- bool PointInVector(const Point &) const;
- bool PointOnLine(const Point &) const;
- double Angle(const Point &) const;
- CVector Orthogonal(const Point &, const Point &) const; // vecteur orthogonal partant du 1er point vers le 2eme point
- CVector Orthogonal(const Point &, unsigned int) const; // vecteur orthogonal partant du point dans le sens donne
- // vecteur orthogonal par le projete orthogonal du point sur le vecteur
- inline CVector Orthogonal (const Point &pt) const { return CVector(Projected(pt), pt); }
- Point Projected(const Point &) const; // projete orthogonal du point sur le vecteur
-
- void SetLength(long);
- void Mask(const Rect &);
- long PosFromPoint(const Point &) const; // retourne la position ESTIMEE d'un point sur
- // la droite. Cela ne veut pas dire qu'il
- // fait partie de la droite
-
- void MoveTo(const Point &ptNewStart);
-
- // Deplace
- bool m_fHorizontal; // variations horizontale/verticale la moins importante
-
- protected:
-
- long m_lDeltaX; // variation en abscisse
- long m_lDeltaY; // variation en ordonnee
- double m_dblNorm; // norme du vecteur en pixels
- };
-
- #endif
|