Previous Implementation PAbstractVect3.h |
Parent Abtract vector implementation |
Outline | Next Implementation PAbstractVect3_impl.h |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
/*************************************** Auteur : Pierre Aubert Mail : aubertp7@gmail.com Licence : CeCILL-C ****************************************/ #ifndef __PABSTRACT_VECT_3_H__ #define __PABSTRACT_VECT_3_H__ #include <iostream> #define VECT3F_NULL PAbstractVect3<T>(0, 0, 0) template<typename T> class PAbstractVect3; ///@brief Abstract vector template <typename T> class PAbstractVect3{ public: PAbstractVect3(); PAbstractVect3(const T & x, const T & y); PAbstractVect3(const T & x, const T & y, const T & z); PAbstractVect3(const PAbstractVect3<T> & other); virtual ~PAbstractVect3(); ///définition de l'opérateur [] pour un PAbstractVect3 non constant /** @param i : indice de l'élément du PAbstractVect3 que l'on veut retourner * @return valeur de l'élément du PAbstractVect3 */ T & operator[] (long unsigned int i){return p_values[i];} ///définition de l'opérateur [] pour un PAbstractVect3 constant /** @param i : indice de l'élément du PAbstractVect3 que l'on veut retourner * @return valeur de l'élément du PAbstractVect3 */ const T & operator[] (long unsigned int i) const{return p_values[i];} ///Définition de l'opérateur parenthèse pour être compatible avec le parcours des expressions template /** @param r : valeur de l'élément que l'on veut retourner * @param i : indice de l'élément que l'on veut récupérer */ void operator () (T & r, long unsigned int i) const{r = p_values[i];} PAbstractVect3 & operator = (const PAbstractVect3<T> & vect); PAbstractVect3 & operator += (const PAbstractVect3<T> & vect); PAbstractVect3 & operator -= (const PAbstractVect3<T> & vect); PAbstractVect3 & operator *= (const T & scal); PAbstractVect3 & operator /= (const T & scal); PAbstractVect3 operator -() const; void setComposante(const T & x); void setComposante(const T & x, const T & y); void setComposante(const T & x, const T & y, const T & z); void setX(const T & x); void setY(const T & y); void setZ(const T & z); void addX(const T & dx); void addY(const T & dy); void addZ(const T & dz); void sousX(const T & dx); void sousY(const T & dy); void sousZ(const T & dz); void scaleX(const T & sx); void scaleY(const T & sy); void scaleZ(const T & sz); void scale(const T & sx, const T & sy, const T & sz); T getX() const; T & getX(); T getY() const; T & getY(); T getZ() const; T & getZ(); ////////////////////////////////////////////////////////////////// // // // Opérateurs amis de la classe PAbstractVect3 // // // ////////////////////////////////////////////////////////////////// ///Définition du produit scalaire entre deux PAbstractVect3 /** @param vect1 : PAbstractVect3 * @param vect2 : PAbstractVect3 * @return T, produit scalaire de vect1 et vect2 * C'est vrai que dans ce cas on n'utilise pas les expressions templates, mais on a besoin d'un temporaire, car c'est un scalaire, et faire plusieur fois le même calcul ne serait pas constructif */ friend T operator * (const PAbstractVect3<T> & vect1, const PAbstractVect3<T> & vect2){ return vect1.p_values[0]*vect2.p_values[0] + vect1.p_values[1]*vect2.p_values[1] + vect1.p_values[2]*vect2.p_values[2]; } ///Définition de l'addition de deux Vecteur3 /** @param vect1 : Vecteur3 @param vect2 : Vecteur3 @return Vecteur3 addition de vect1 + vect2 */ friend PAbstractVect3<T> operator + (const PAbstractVect3<T> & vect1, const PAbstractVect3<T> & vect2){ PAbstractVect3<T> vect3(vect1.p_values[0] + vect2.p_values[0], vect1.p_values[1] + vect2.p_values[1], vect1.p_values[2] + vect2.p_values[2]); return vect3; } ///Définition de la soustraction de deux Vecteur3, const à droite /** @param vect1 : Vecteur3 @param vect2 : Vecteur3 @return Vecteur3 soustraction de vect1 - vect2 */ friend PAbstractVect3<T> operator - (const PAbstractVect3<T> & vect1, const PAbstractVect3<T> & vect2){ PAbstractVect3<T> vect3(vect1.p_values[0] - vect2.p_values[0], vect1.p_values[1] - vect2.p_values[1], vect1.p_values[2] - vect2.p_values[2]); return vect3; } ///mutiplication par un scalaire à droite /** Définition de la multiplication par un scalaire à droite @param vect : Vecteur3 @param scal : scalaire @return Vecteur3 produit de vect1*scal */ friend PAbstractVect3<T> operator * (const PAbstractVect3<T> & vect, const T & scal){ PAbstractVect3<T> vect2(vect.p_values[0]*scal, vect.p_values[1]*scal, vect.p_values[2]*scal); return vect2; } ///mutiplication par un scalaire à gauche /** Définition de la multiplication par un scalaire à gauche @param scal : scalaire @param vect : Vecteur3 @return Vecteur3 produit de scal*vect1 */ friend PAbstractVect3<T> operator * (const T & scal, const PAbstractVect3<T> & vect){ PAbstractVect3<T> vect2(vect.p_values[0]*scal, vect.p_values[1]*scal, vect.p_values[2]*scal); return vect2; } /// division par un scalaire /** @param vect : Vecteur3 @param scal : scalaire @return Vecteur3 division de vect1/scal */ friend PAbstractVect3<T> operator / (const PAbstractVect3<T> & vect, const T & scal){ PAbstractVect3<T> vect2(vect.p_values[0]/scal, vect.p_values[1]/scal, vect.p_values[2]/scal); return vect2; } /// Définition du produit vectoriel /** @param vect1 : Vecteur3 @param vect2 : Vecteur3 @return Vecteur3 produit vectoriel vect1^vect2 */ friend PAbstractVect3<T> operator ^ (const PAbstractVect3<T> & vect1, const PAbstractVect3<T> & vect2){ PAbstractVect3<T> vect(vect1.p_values[1]*vect2.p_values[2] - vect1.p_values[2]*vect2.p_values[1], -vect1.p_values[0]*vect2.p_values[2] + vect1.p_values[2]*vect2.p_values[0], vect1.p_values[0]*vect2.p_values[1] - vect1.p_values[1]*vect2.p_values[0]); return vect; } ///Définition de l'égalité entre deux PAbstractVect3 /** @param vect1 : PAbstractVect3 * @param vect2 : PAbstractVect3 * @return true si vect1 est égale vect2, false sinon */ friend bool operator == (const PAbstractVect3<T> & vect1, const PAbstractVect3<T> & vect2){ return (abstractEqual(vect1.p_values[0], vect2.p_values[0]) && abstractEqual(vect1.p_values[1], vect2.p_values[1]) && abstractEqual(vect1.p_values[2], vect2.p_values[2])); } ///Définition de l'inégalité entre deux PAbstractVect3 /** @param vect1 : PAbstractVect3 * @param vect2 : PAbstractVect3 * @return true si vect1 est différent vect2, false sinon */ friend bool operator != (const PAbstractVect3<T> & vect1, const PAbstractVect3<T> & vect2){ return (!abstractEqual(vect1.p_values[0], vect2.p_values[0]) || !abstractEqual(vect1.p_values[1], vect2.p_values[1]) || !abstractEqual(vect1.p_values[2], vect2.p_values[2])); } ///permet l'affichage d'un vecteur dans la console /** @param out : sortie de la console * @param vecteur : PAbstractVect3 que l'on veut afficher * @return sortie de la console avec le PAbstractVect3 */ friend std::ostream & operator << (std::ostream & out, const PAbstractVect3<T> & vecteur){ out << vecteur.p_values[0] << " " << vecteur.p_values[1] << " " << vecteur.p_values[2]; return out; } ///permet l'initialisation d'un PAbstractVect3 dans la console où avec un fichier de config /** @param in : entrée standart de la console (cin) @param v : PAbstractVect3 à initialiser */ friend std::istream & operator >> (std::istream & in, PAbstractVect3<T> & v){ in >> v.p_values[0] >> v.p_values[1] >> v.p_values[2]; return in; } private: void copyPAbstractVect3(const PAbstractVect3<T> & other); ///composantes de la classe PAbstractVect3 T p_values[3]; }; #include "PAbstractVect3_impl.h" #endif |
Previous Implementation PAbstractVect3.h |
Parent Abtract vector implementation |
Outline | Next Implementation PAbstractVect3_impl.h |