Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

jAPIgeometry.h

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------
00002 #ifndef jAPIgeometryH
00003 #define jAPIgeometryH
00004 //---------------------------------------------------------------------------
00005 
00006 // constants used for intersection
00007 enum jIntersections {inter_n_existe_pas=0, inter_existe, negatif, positif, posterieur, anterieur, bas, haut, confondues, paralleles_strict, segment_inside, segment_outside };
00008 
00009 class jPoint;
00010 
00011 class jVecteur
00012 {
00013         public:
00014         double  x,y;
00015         jVecteur(double xx=0, double yy=0)              { x = xx;      y = yy;        }
00016         jVecteur(const TPoint & a, const TPoint & b)    { x = b.x-a.x; y = b.y-a.y;   }
00017         jVecteur & operator=(const jVecteur & v)        { x = v.x;     y = v.y;       return *this;}
00018 
00019         friend  jVecteur        operator*(jVecteur v, double f) { return jVecteur(v.x*f, v.y*f); }
00020         friend  jVecteur        operator*(float f, jVecteur v)  { return jVecteur(v.x*f, v.y*f); }
00021         void __fastcall         operator*=(double f)            { x*=f; y*=f; }
00022         jVecteur __fastcall     operator+(jVecteur v)           { return jVecteur(x+v.x, y+v.y); }
00023         void     __fastcall     Rotation(float);
00024         float    __fastcall     Norme();
00025 };
00026 
00027 class jSegment;
00028 
00029 class jDroite
00030 {
00031         public:
00032 
00033         // coeffs directeurs
00034         double a, b, c;
00035 
00036         jDroite()       {a=0; b=0; c=0; }
00037         jDroite(const TPoint & p, const jVecteur & v);
00038         jDroite(const jVecteur& v, const TPoint& p);
00039         jDroite(const TPoint & p1, const TPoint & p2);
00040         jDroite & operator=(const jDroite & D) { a = D.a; b = D.b; c = D.c; return *this;}
00041 
00042         bool __fastcall Rotation(const TPoint & centre, double angleRotDegres);
00043         jVecteur __fastcall Porteur();
00044         jVecteur __fastcall Normal();
00045 };
00046 
00047 TPoint __fastcall jGEOmilieu(const TPoint & p, const TPoint & q)                        { return TPoint((p.x+q.x)/2.0, (p.y+q.y)/2.0);  }
00048 
00049 double jGEOdistance(const jDroite  & d, const jPoint & p);
00050 double jGEOdistance(const jSegment & s, const jPoint & p);
00051 
00052 TPoint __fastcall jGEOintersection(const jDroite & d1, const jDroite & d2, jIntersections & _cas);
00053 TPoint __fastcall jGEOintersection(const jDroite & d, const jSegment & s,  jIntersections & _cas);
00054 inline  TPoint __fastcall jGEOintersection(const jSegment & s, const jDroite & d, jIntersections & _cas) { return jGEOintersection(d, s, _cas); }
00055 
00056 jDroite __fastcall jGEOperpendiculaire(const jDroite & d, const TPoint & p)             { return jDroite(p, d.Normal()); }
00057 inline jDroite __fastcall jGEOperpendiculaire(const TPoint & p, const jDroite & d)      { return jGEOperpendiculaire(d, p); }
00058 
00059 TPoint __fastcall jGEOprojection(const TPoint & p, const jDroite & d)                   { jIntersections existe; return jGEOintersection(d, jGEOperpendiculaire(d, p), existe); }
00060 inline  TPoint __fastcall jGEOprojection(const jDroite & d, const TPoint & p)           { return jGEOprojection(p, d); }
00061 
00062 jDroite __fastcall jGEOparallele(const jDroite & d, const TPoint & p)                   { return jDroite(p, d.Porteur()); }
00063 inline  jDroite __fastcall jGEOparallele(const TPoint & p, const jDroite & d)           { return jGEOparallele(d, p); }
00064 
00065 jDroite __fastcall jGEOrotation(const jDroite &d, const TPoint &p, float angle);
00066 
00067 jDroite __fastcall jGEOparalleleDistante(const jDroite &d, double distance, jIntersections sens);
00068 inline jDroite __fastcall jGEOparalleleDistante(double distance, jDroite d, jIntersections sens)   { return jGEOparalleleDistante(d, distance, sens); }
00069 
00070 TPoint __fastcall jGEOpointDistant(const TPoint & p, const jVecteur & v, double distance, jIntersections sens);
00071 inline  TPoint __fastcall jGEOpointDistant(const jVecteur & v, const TPoint & p,  double f, jIntersections sens)  { return jGEOpointDistant(p,v,f,sens);          }
00072 inline  TPoint __fastcall jGEOpointDistant(const TPoint & p,   const jDroite & d, double f, jIntersections sens)  { return jGEOpointDistant(p,d.Porteur(),f,sens);}
00073 inline  TPoint __fastcall jGEOpointDistant(const jDroite & d,  const TPoint & p,  double f, jIntersections sens)  { return jGEOpointDistant(p,d.Porteur(),f,sens);}
00074 
00075 class jPoint : public TPoint
00076 {
00077         public:
00078 
00079         jPoint()                        { x=0; y=0; }
00080         jPoint(int a, int b)            { x=a; y=b; }
00081 //        jPoint(double a, double b)      { x=a; y=b; }
00082 
00083         jPoint(const TPoint & p)  { x=p.x; y=p.y; }
00084         jPoint & operator=(const TPoint & P)        { x=P.x; y=P.y; return *this;}
00085         bool __fastcall     Rotation(const jPoint & centre, double angleRotDegres);
00086         bool __fastcall     Translation(const jVecteur & v)   { x+=v.x; y+=v.y; return true;}
00087         void __fastcall     Stretch(const jPoint & origine, double rapX, double rapY)
00088         {
00089                 x = origine.x + rapX*(x - origine.x);
00090                 y = origine.y + rapY*(y - origine.y);
00091         }
00092         bool __fastcall     Symetrie(const jDroite & d);
00093         // fait passer le point du système de coordonnées OldCadre, au système NewCadre)
00094         bool __fastcall     Stretch( const TRect & NewCadre, const TRect & OldCadre, bool right=true);
00095         // fait passer le point du système de coordonnées NewCadre, au système OldCadre)
00096         bool __fastcall     UnStretch(const TRect & NewCadre, const TRect & OldCadre, bool right=true);
00097         bool operator==(const jPoint & p)             { return (x==p.x && y==p.y); }
00098         bool operator!=(const jPoint & p)             { return (x!=p.x || y!=p.y); }
00099 };
00100 
00101 class jSegment
00102 {
00103         public:
00104         TPoint  p, q;
00105         jDroite d;
00106 
00107         jSegment()                                      { p=TPoint(0, 0); q=TPoint(0, 0); d=jDroite(p, q); }
00108         jSegment(TPoint pp, TPoint qq)                  { p=pp; q=qq; d=jDroite(pp, qq);                   }
00109         jSegment(TPoint pp, TPoint qq, jDroite dd)      { p=pp; q=qq; d=dd;                                }
00110 
00111         jDroite & Porteuse()                            { return d; }
00112 };
00113 
00114 #endif

Generated on Sat Nov 15 10:52:34 2003 for JAPI by doxygen 1.3.4