/*************************************** Auteur : Pierre Aubert Mail : aubertp7@gmail.com Licence : CeCILL-C ****************************************/ #ifndef __PABSTRACT_VECT_3_IMPL_H__ #define __PABSTRACT_VECT_3_IMPL_H__ #include "PAbstractVect3.h" ///constructeur de PAbstractVect3 template PAbstractVect3::PAbstractVect3(){} ///constructeur de PAbstractVect3 /** @param x : première composante * @param y : deuxième composante */ template PAbstractVect3::PAbstractVect3(const T & x, const T & y){ p_values[0] = x; p_values[1] = y; } ///constructeur de PAbstractVect3 /** @param x : première composante * @param y : deuxième composante * @param z : troisième composante */ template PAbstractVect3::PAbstractVect3(const T & x, const T & y, const T & z){ p_values[0] = x; p_values[1] = y; p_values[2] = z; } ///constructeur de copie de PAbstractVect3 /** @param other : PAbstractVect3 à copier */ template PAbstractVect3::PAbstractVect3(const PAbstractVect3 & other){ copyPAbstractVect3(other); } ///destructeur de PAbstractVect3 template PAbstractVect3::~PAbstractVect3(){ } ///Equal operator /** @param vect : vector to be copied * @return copied vector */ template typename PAbstractVect3::PAbstractVect3 & PAbstractVect3::operator = (const PAbstractVect3 & vect){ copyPAbstractVect3(vect); return *this; } ///redéfinition de l'opérateur += /** @param vect : PAbstractVect3 * @return PAbstractVect3 */ template typename PAbstractVect3::PAbstractVect3 & PAbstractVect3::operator += (const PAbstractVect3 & vect){ p_values[0] += vect.p_values[0]; p_values[1] += vect.p_values[1]; p_values[2] += vect.p_values[2]; return *this; } ///redéfinition de l'opérateur -= /** @param vect : PAbstractVect3 * @return PAbstractVect3 */ template typename PAbstractVect3::PAbstractVect3 & PAbstractVect3::operator -= (const PAbstractVect3 & vect){ p_values[0] -= vect.p_values[0]; p_values[1] -= vect.p_values[1]; p_values[2] -= vect.p_values[2]; return *this; } ///redéfinition de l'opérateur *= avec un T /** @param scal : scalaire * @return PAbstractVect3 */ template typename PAbstractVect3::PAbstractVect3 & PAbstractVect3::operator *= (const T & scal){ p_values[0] *= scal; p_values[1] *= scal; p_values[2] *= scal; return *this; } ///redéfinition de l'opérateur /= avec un T /** @param scal : scalaire * @return PAbstractVect3 */ template typename PAbstractVect3::PAbstractVect3 & PAbstractVect3::operator /= (const T & scal){ p_values[0] /= scal; p_values[1] /= scal; p_values[2] /= scal; return *this; } ///définition de l'opérateur - /** @return opposé du vecteur courant */ template typename PAbstractVect3::PAbstractVect3 PAbstractVect3::operator -() const{ PAbstractVect3 result(-p_values[0], -p_values[1], -p_values[2]); return result; } ///fonction qui permet d'initialiser les composantes du PAbstractVect3 /** @param x : première composante */ template void PAbstractVect3::setComposante(const T & x){ p_values[0] = x; } ///fonction qui permet d'initialiser les composantes du PAbstractVect3 /** @param x : première composante * @param y : deuxième composante */ template void PAbstractVect3::setComposante(const T & x, const T & y){ p_values[0] = x; p_values[1] = y; } ///fonction qui permet d'initialiser les composantes du PAbstractVect3 /** @param x : première composante * @param y : deuxième composante * @param z : troisième composante */ template void PAbstractVect3::setComposante(const T & x, const T & y, const T & z){ p_values[0] = x; p_values[1] = y; p_values[2] = z; } ///fonction qui initialise la première composante du PAbstractVect3 /** @param x : première composante du PAbstractVect3 */ template void PAbstractVect3::setX(const T & x){p_values[0] = x;} ///fonction qui initialise la deuxième composante du PAbstractVect3 /** @param y : deuxième composante du PAbstractVect3 */ template void PAbstractVect3::setY(const T & y){p_values[1] = y;} ///fonction qui initialise la troisième composante du PAbstractVect3 /** @param z : troisième composante du PAbstractVect3 */ template void PAbstractVect3::setZ(const T & z){p_values[2] = z;} ///fonction qui ajoute une valeur à la première composante du PAbstractVect3 /** @param dx : valeur à ajouter à la première composante */ template void PAbstractVect3::addX(const T & dx){p_values[0] += dx;} ///fonction qui ajoute une valeur à la deuxième composante du PAbstractVect3 /** @param dy : valeur à ajouter à la deuxième composante */ template void PAbstractVect3::addY(const T & dy){p_values[1] += dy;} ///fonction qui ajoute une valeur à la troisième composante du PAbstractVect3 /** @param dz : valeur à ajouter à la troisième composante */ template void PAbstractVect3::addZ(const T & dz){p_values[2] += dz;} ///fonction qui soustrait une valeur à la première composante du PAbstractVect3 /** @param dx : valeur à soustraire à la première composante */ template void PAbstractVect3::sousX(const T & dx){p_values[0] -= dx;} ///fonction qui soustrait une valeur à la deuxième composante du PAbstractVect3 /** @param dy : valeur à soustraire à la deuxième composante */ template void PAbstractVect3::sousY(const T & dy){p_values[1] -= dy;} ///fonction qui permet de changer l'échelle de la composante x du vecteur courant /** @param sx : échelle sur l'axe Ox */ template void PAbstractVect3::scaleX(const T & sx){ p_values[0] /= sx; } ///fonction qui permet de changer l'échelle de la composante y du vecteur courant /** @param sy : échelle sur l'axe Oy */ template void PAbstractVect3::scaleY(const T & sy){ p_values[1] /= sy; } ///fonction qui permet de changer l'échelle de la composante z du vecteur courant /** @param sz : échelle sur l'axe Oz */ template void PAbstractVect3::scaleZ(const T & sz){ p_values[2] /= sz; } ///fonction qui permet de changer l'échelle du vecteur courant /** @param sx : échelle sur l'axe Ox * @param sy : échelle sur l'axe Oy * @param sz : échelle sur l'axe Oz */ template void PAbstractVect3::scale(const T & sx, const T & sy, const T & sz){ p_values[0] /= sx; p_values[1] /= sy; p_values[2] /= sz; } ///fonction qui soustrait une valeur à la troisième composante du PAbstractVect3 /** @param dz : valeur à soustraire à la troisième composante */ template void PAbstractVect3::sousZ(const T & dz){p_values[2] -= dz;} ///fonction qui renvoie la valeur de la première composante /** @return valeur de la première composante */ template T PAbstractVect3::getX() const{return p_values[0];} ///fonction qui renvoie la valeur de la première composante /** @return valeur de la première composante */ template T & PAbstractVect3::getX(){return p_values[0];} ///fonction qui renvoie la valeur de la deuxième composante /** @return valeur de la deuxième composante */ template T PAbstractVect3::getY() const{return p_values[1];} ///fonction qui renvoie la valeur de la deuxième composante /** @return valeur de la deuxième composante */ template T & PAbstractVect3::getY(){return p_values[1];} ///fonction qui renvoie la valeur de la troisième composante /** @return valeur de la troisième composante */ template T PAbstractVect3::getZ() const{return p_values[2];} ///fonction qui renvoie la valeur de la troisième composante /** @return valeur de la troisième composante */ template T & PAbstractVect3::getZ(){return p_values[2];} ////////////////////////////////////////////////////////////////// // // // Fonctions privées de la classe PAbstractVect3 // // // ////////////////////////////////////////////////////////////////// ///fonction qui copie un PAbstractVect3 /** @param other : PAbstractVect3 à copier */ template void PAbstractVect3::copyPAbstractVect3(const PAbstractVect3 & other){ p_values[0] = other.p_values[0]; p_values[1] = other.p_values[1]; p_values[2] = other.p_values[2]; } #endif