Main Page | Class Hierarchy | Class List | Directories | File List

Vec2.h

00001 #ifndef __VEC2__
00002 #define __VEC2__
00003 
00004 #include <QString>
00005 #include <QDomElement>
00006 #include <QDomDocument>
00007 
00008 
00009 namespace apig {
00010     class Vec3;
00011     
00013     class Vec2 {
00014         public:
00015             Vec2(float x, float y);
00016             Vec2(float c = 0);      // vecteur (c,c)
00017             Vec2(const float *v);   // tableau de 2 valeurs
00018             Vec2(const QDomElement &element);
00019             
00020         // opérateurs de conversion :
00021         //---------------------------
00022             // opérateurs de conversion automatique :
00023             inline operator const float* () const { return v; }     // cast en const float*
00024             inline operator       float* ()       { return v; }     // cast en float*
00025             // autres conversions :
00026             QString toQString() const;
00027             // lecture / écriture d'un élément XML :
00028             void initFromDOMElement(const QDomElement &element);
00029             QDomElement domElement(const QString &name, QDomDocument &document) const;
00030     
00031         // opérations géométriques :
00032         //--------------------------
00033             float norm() const;         // norme
00034             float norm2() const;        // norme au carré
00035             void  normalize();          // normalise le vecteur
00036             Vec2  normalized() const;   // retourne le vecteur normalisé
00037     
00038             friend float dist(Vec2 v1, Vec2 v2);    // distance euclidienne
00039             
00040             friend float dot(const Vec2 &a, const Vec2 &b);     // produit scalaire
00041             friend Vec3  vec(const Vec2 &a, const Vec2 &b);     // produit vectoriel
00042             friend float vecz(const Vec2 &a, const Vec2 &b);    // composante z du produit vectoriel
00043             friend float operator|(const Vec2 &a, const Vec2 &b);   // produit scalaire
00044             friend Vec3  operator^(const Vec2 &a, const Vec2 &b);   // produit vectoriel
00045     
00046             float arg() const;      // retourne l'angle par rapport à l'axe des abscisses (dans ]-Pi,Pi])
00047             Vec2 polar() const;     // retourne les coordonnées polaires (r, théta)
00048             
00049         // opérateurs arithmétiques :
00050         //---------------------------
00051             // opérateurs arithmétiques unaires :
00052             friend Vec2 operator-(const Vec2 &a);
00053     
00054             // opérateurs arithmétiques binaires :
00055             friend Vec2 operator+(const Vec2 &a, const Vec2 &b);
00056             friend Vec2 operator-(const Vec2 &a, const Vec2 &b);
00057             friend Vec2 operator*(const Vec2 &a, const Vec2 &b);
00058             friend Vec2 operator/(const Vec2 &a, const Vec2 &b);
00059                 
00060             // opérations avec un scalaire :
00061             friend Vec2 operator*(float s, const Vec2 &a);
00062             friend Vec2 operator*(const Vec2 &a, float s);
00063             friend Vec2 operator/(float s, const Vec2 &a);
00064             friend Vec2 operator/(const Vec2 &a, float s);
00065             
00066             // opérateurs de modification :
00067             Vec2& operator+=(const Vec2 &a);
00068             Vec2& operator-=(const Vec2 &a);
00069             Vec2& operator*=(const Vec2 &a);
00070             Vec2& operator/=(const Vec2 &a);
00071             Vec2& operator*=(float s);
00072             Vec2& operator/=(float s);
00073         
00074         // opérateurs de comparaison :
00075         //----------------------------
00076             friend bool operator==(const Vec2 &a, const Vec2 &b);   // comparaison à 1e-10 près
00077             friend bool operator!=(const Vec2 &a, const Vec2 &b);   // comparaison à 1e-10 près
00078             // les comparaisons suivantes sont le <et> booléen des comparaisons sur les composantes :
00079             friend bool operator>=(const Vec2 &a, const Vec2 &b);
00080             friend bool operator<=(const Vec2 &a, const Vec2 &b);
00081             friend bool operator>(const Vec2 &a, const Vec2 &b);
00082             friend bool operator<(const Vec2 &a, const Vec2 &b);
00083             friend bool operator>=(const Vec2 &a, float b);
00084             friend bool operator<=(const Vec2 &a, float b);
00085             friend bool operator>(const Vec2 &a, float b);
00086             friend bool operator<(const Vec2 &a, float b);
00087         
00088         // autres fonctions pratiques :
00089         //-----------------------------
00090             friend Vec2 abs(const Vec2 &a);
00091             friend Vec2 sign(const Vec2 &a);
00092             friend Vec2 floor(const Vec2 &a);
00093             friend Vec2 ceil(const Vec2 &a);
00094             friend Vec2 fract(const Vec2 &a);
00095             friend Vec2 min(const Vec2 &a, const Vec2 &b);
00096             friend Vec2 min(const Vec2 &a, float b);
00097             friend Vec2 max(const Vec2 &a, const Vec2 &b);
00098             friend Vec2 max(const Vec2 &a, float b);
00099             friend Vec2 clamp(const Vec2 &a, const Vec2 &min, const Vec2 &max);
00100             friend Vec2 clamp(const Vec2 &a, float min, float max);
00101             friend Vec2 mix(const Vec2 &a, const Vec2 &b, const Vec2 &alpha);     // (1-alpha) * a + alpha * b
00102             friend Vec2 mix(const Vec2 &a, const Vec2 &b, float alpha);           // (1-alpha) * a + alpha * b
00103             friend Vec2 step(const Vec2 &e, const Vec2 &a);
00104             friend Vec2 step(float e, const Vec2 &a);
00105             friend float min(const Vec2 &a);    // minimum des composantes
00106             friend float max(const Vec2 &a);    // maximum des composantes
00107         
00108         // calcul de vecteurs aléatoires (variables uniformes) :
00109         //------------------------------------------------------
00110             static Vec2 random();                       // valeurs dans [0,1[
00111             static Vec2 random(float min, float max);   // valeurs dans [min,max[
00112             static Vec2 random(Vec2 min, Vec2 max);     // bornes par composantes
00113     
00114         // opérations OpenGL :
00115         //--------------------
00116             void glVertex() const;    // effectue le glVertex correspondant
00117     
00118         public:
00119             union {
00120                 struct { float x, y; };
00121                 float v[2];
00122                 };
00123         };
00124     
00125     }
00126 
00127 #endif
00128 

Generated on Fri Nov 14 20:49:47 2008 for Api Graphics by  doxygen 1.4.4