|
@@ -1,219 +1,219 @@
|
|
|
-#include "Vecteur.h"
|
|
|
+#include "Vecteur.h"
|
|
|
|
|
|
-///Constructeurs
|
|
|
-Vec::Vec() : m_x(0.0), m_y(0.0), m_z(0.0)
|
|
|
+///Constructeurs
|
|
|
+Vec::Vec() : m_x(0.0), m_y(0.0), m_z(0.0)
|
|
|
{}
|
|
|
-
|
|
|
-Vec::Vec(float x, float y, float z) : m_x(x), m_y(y), m_z(z)
|
|
|
+
|
|
|
+Vec::Vec(float x, float y, float z) : m_x(x), m_y(y), m_z(z)
|
|
|
{}
|
|
|
-
|
|
|
-Vec::Vec(const Vec &vecteur) : m_x(vecteur.getX()), m_y(vecteur.getY()), m_z(vecteur.getZ())
|
|
|
+
|
|
|
+Vec::Vec(const Vec &vecteur) : m_x(vecteur.getX()), m_y(vecteur.getY()), m_z(vecteur.getZ())
|
|
|
{}
|
|
|
-
|
|
|
-Vec::~Vec()
|
|
|
+
|
|
|
+Vec::~Vec()
|
|
|
{}
|
|
|
|
|
|
-///Fonctions
|
|
|
-void Vec::normaliser()
|
|
|
-{
|
|
|
- // La fonction sqrt() permet de trouver la racine carré d'un nombre
|
|
|
- float longueur(sqrt(m_x * m_x + m_y * m_y + m_z * m_z));
|
|
|
-
|
|
|
- // Normalisation du vecteur
|
|
|
- if(longueur != 0.0f)
|
|
|
- {
|
|
|
- m_x /= longueur;
|
|
|
- m_y /= longueur;
|
|
|
- m_z /= longueur;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-float Vec::scalair(const Vec &vecteur) const
|
|
|
-{
|
|
|
- Vec v1(*this), v2(vecteur);
|
|
|
- v1.normaliser();
|
|
|
- v2.normaliser();
|
|
|
- return v1.getX() * v2.getX() + v1.getY() * v2.getY() + v1.getZ() * v2.getZ();
|
|
|
-}
|
|
|
-
|
|
|
-double Vec::norme() const
|
|
|
-{
|
|
|
- return sqrt(m_x*m_x+m_y*m_y+m_z*m_z);
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::rotateR(float angle)
|
|
|
-{
|
|
|
- float tmp = m_x;
|
|
|
- m_x = cos(angle)*m_x-sin(angle)*m_y;
|
|
|
- m_y = sin(angle)*tmp+cos(angle)*m_y;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::rotateD(float angle)
|
|
|
-{
|
|
|
- float _angle = angle * M_PI / 180.0;
|
|
|
- float tmp = m_x;
|
|
|
- m_x = cos(_angle)*m_x-sin(_angle)*m_y;
|
|
|
- m_y = sin(_angle)*tmp+cos(_angle)*m_y;
|
|
|
-}
|
|
|
-
|
|
|
-///Getters
|
|
|
-float Vec::getX() const
|
|
|
-{
|
|
|
- return m_x;
|
|
|
-}
|
|
|
-
|
|
|
-float Vec::getY() const
|
|
|
-{
|
|
|
- return m_y;
|
|
|
-}
|
|
|
-
|
|
|
-float Vec::getZ() const
|
|
|
-{
|
|
|
- return m_z;
|
|
|
-}
|
|
|
-
|
|
|
-/// Setters
|
|
|
-void Vec::setVecteur(float x, float y, float z)
|
|
|
-{
|
|
|
- m_x = x;
|
|
|
- m_y = y;
|
|
|
- m_z = z;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::setX(float x)
|
|
|
-{
|
|
|
- m_x = x;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::setY(float y)
|
|
|
-{
|
|
|
- m_y = y;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::setZ(float z)
|
|
|
-{
|
|
|
- m_z = z;
|
|
|
-}
|
|
|
-
|
|
|
-///Opérateurs
|
|
|
-Vec& Vec::operator=(const Vec &vecteur)
|
|
|
-{
|
|
|
- // Copie des valeurs
|
|
|
- m_x = vecteur.m_x;
|
|
|
- m_y = vecteur.m_y;
|
|
|
- m_z = vecteur.m_z;
|
|
|
-
|
|
|
- // Retour de l'objet
|
|
|
- return *this;
|
|
|
-}
|
|
|
-
|
|
|
-Vec Vec::operator+(const Vec &vecteur)
|
|
|
-{
|
|
|
- // Création d'un objet résultat
|
|
|
- Vec resultat;
|
|
|
-
|
|
|
- // Addition des coordonnées
|
|
|
- resultat.m_x = m_x + vecteur.m_x;
|
|
|
- resultat.m_y = m_y + vecteur.m_y;
|
|
|
- resultat.m_z = m_z + vecteur.m_z;
|
|
|
-
|
|
|
- // Retour de résultat
|
|
|
- return resultat;
|
|
|
-}
|
|
|
-
|
|
|
-Vec Vec::operator-(const Vec &vecteur)
|
|
|
-{
|
|
|
- // Création d'un objet résultat
|
|
|
- Vec resultat;
|
|
|
-
|
|
|
- // Soustraction des coordonnées
|
|
|
- resultat.m_x = m_x - vecteur.m_x;
|
|
|
- resultat.m_y = m_y - vecteur.m_y;
|
|
|
- resultat.m_z = m_z - vecteur.m_z;
|
|
|
-
|
|
|
- // Retour de résultat
|
|
|
- return resultat;
|
|
|
-}
|
|
|
-
|
|
|
-Vec Vec::operator*(float multiplicateur)
|
|
|
-{
|
|
|
- // Création d'un objet résultat
|
|
|
- Vec resultat;
|
|
|
-
|
|
|
- // Multiplication des coordonnées
|
|
|
- resultat.m_x = m_x * multiplicateur;
|
|
|
- resultat.m_y = m_y * multiplicateur;
|
|
|
- resultat.m_z = m_z * multiplicateur;
|
|
|
-
|
|
|
- // Retour du résultat
|
|
|
- return resultat;
|
|
|
-}
|
|
|
-
|
|
|
-Vec Vec::operator/(float diviseur)
|
|
|
-{
|
|
|
- // Création d'un objet résultat
|
|
|
- Vec resultat;
|
|
|
-
|
|
|
- // Multiplication des coordonnées
|
|
|
- resultat.m_x = m_x / diviseur;
|
|
|
- resultat.m_y = m_y / diviseur;
|
|
|
- resultat.m_z = m_z / diviseur;
|
|
|
-
|
|
|
- // Retour du résultat
|
|
|
- return resultat;
|
|
|
-}
|
|
|
-
|
|
|
-Vec Vec::operator*(const Vec &vecteur)
|
|
|
-{
|
|
|
- // Création d'un objet résultat
|
|
|
- Vec resultat;
|
|
|
-
|
|
|
- // Produit Vectoriel
|
|
|
- resultat.m_x = (m_y * vecteur.m_z) - (m_z * vecteur.m_y);
|
|
|
- resultat.m_y = (m_z * vecteur.m_x) - (m_x * vecteur.m_z);
|
|
|
- resultat.m_z = (m_x * vecteur.m_y) - (m_y * vecteur.m_x);
|
|
|
-
|
|
|
- // Retour de l'objet
|
|
|
- return resultat;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::operator*=(const Vec &vecteur)
|
|
|
-{
|
|
|
- *this = *this * vecteur;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::operator-=(const Vec &vecteur)
|
|
|
-{
|
|
|
- *this = *this - vecteur;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::operator+=(const Vec &vecteur)
|
|
|
-{
|
|
|
- *this = *this + vecteur;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::operator*=(float multiplicateur)
|
|
|
-{
|
|
|
- *this = *this * multiplicateur;
|
|
|
-}
|
|
|
-
|
|
|
-void Vec::operator/=(float multiplicateur)
|
|
|
-{
|
|
|
- *this = *this * multiplicateur;
|
|
|
-}
|
|
|
-
|
|
|
-bool Vec::operator==(const Vec &vecteur)
|
|
|
-{
|
|
|
- if(m_x == vecteur.getX() && m_y == vecteur.getY() && m_z == vecteur.getZ())
|
|
|
- return true;
|
|
|
- else
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-bool Vec::operator!=(const Vec &vecteur)
|
|
|
-{
|
|
|
- if(*this == vecteur)
|
|
|
- return false;
|
|
|
- else
|
|
|
- return true;
|
|
|
-}
|
|
|
+///Fonctions
|
|
|
+void Vec::normaliser()
|
|
|
+{
|
|
|
+ // La fonction sqrt() permet de trouver la racine carré d'un nombre
|
|
|
+ float longueur(sqrt(m_x * m_x + m_y * m_y + m_z * m_z));
|
|
|
+
|
|
|
+ // Normalisation du vecteur
|
|
|
+ if(longueur != 0.0f)
|
|
|
+ {
|
|
|
+ m_x /= longueur;
|
|
|
+ m_y /= longueur;
|
|
|
+ m_z /= longueur;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+float Vec::scalair(const Vec &vecteur) const
|
|
|
+{
|
|
|
+ Vec v1(*this), v2(vecteur);
|
|
|
+ v1.normaliser();
|
|
|
+ v2.normaliser();
|
|
|
+ return v1.getX() * v2.getX() + v1.getY() * v2.getY() + v1.getZ() * v2.getZ();
|
|
|
+}
|
|
|
+
|
|
|
+double Vec::norme() const
|
|
|
+{
|
|
|
+ return sqrt(m_x*m_x+m_y*m_y+m_z*m_z);
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::rotateR(float angle)
|
|
|
+{
|
|
|
+ float tmp = m_x;
|
|
|
+ m_x = cos(angle)*m_x-sin(angle)*m_y;
|
|
|
+ m_y = sin(angle)*tmp+cos(angle)*m_y;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::rotateD(float angle)
|
|
|
+{
|
|
|
+ float _angle = angle * M_PI / 180.0;
|
|
|
+ float tmp = m_x;
|
|
|
+ m_x = cos(_angle)*m_x-sin(_angle)*m_y;
|
|
|
+ m_y = sin(_angle)*tmp+cos(_angle)*m_y;
|
|
|
+}
|
|
|
+
|
|
|
+///Getters
|
|
|
+float Vec::getX() const
|
|
|
+{
|
|
|
+ return m_x;
|
|
|
+}
|
|
|
+
|
|
|
+float Vec::getY() const
|
|
|
+{
|
|
|
+ return m_y;
|
|
|
+}
|
|
|
+
|
|
|
+float Vec::getZ() const
|
|
|
+{
|
|
|
+ return m_z;
|
|
|
+}
|
|
|
+
|
|
|
+/// Setters
|
|
|
+void Vec::setVecteur(float x, float y, float z)
|
|
|
+{
|
|
|
+ m_x = x;
|
|
|
+ m_y = y;
|
|
|
+ m_z = z;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::setX(float x)
|
|
|
+{
|
|
|
+ m_x = x;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::setY(float y)
|
|
|
+{
|
|
|
+ m_y = y;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::setZ(float z)
|
|
|
+{
|
|
|
+ m_z = z;
|
|
|
+}
|
|
|
+
|
|
|
+///Opérateurs
|
|
|
+Vec& Vec::operator=(const Vec &vecteur)
|
|
|
+{
|
|
|
+ // Copie des valeurs
|
|
|
+ m_x = vecteur.m_x;
|
|
|
+ m_y = vecteur.m_y;
|
|
|
+ m_z = vecteur.m_z;
|
|
|
+
|
|
|
+ // Retour de l'objet
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
+Vec Vec::operator+(const Vec &vecteur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+ Vec resultat;
|
|
|
+
|
|
|
+ // Addition des coordonnées
|
|
|
+ resultat.m_x = m_x + vecteur.m_x;
|
|
|
+ resultat.m_y = m_y + vecteur.m_y;
|
|
|
+ resultat.m_z = m_z + vecteur.m_z;
|
|
|
+
|
|
|
+ // Retour de résultat
|
|
|
+ return resultat;
|
|
|
+}
|
|
|
+
|
|
|
+Vec Vec::operator-(const Vec &vecteur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+ Vec resultat;
|
|
|
+
|
|
|
+ // Soustraction des coordonnées
|
|
|
+ resultat.m_x = m_x - vecteur.m_x;
|
|
|
+ resultat.m_y = m_y - vecteur.m_y;
|
|
|
+ resultat.m_z = m_z - vecteur.m_z;
|
|
|
+
|
|
|
+ // Retour de résultat
|
|
|
+ return resultat;
|
|
|
+}
|
|
|
+
|
|
|
+Vec Vec::operator*(float multiplicateur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+ Vec resultat;
|
|
|
+
|
|
|
+ // Multiplication des coordonnées
|
|
|
+ resultat.m_x = m_x * multiplicateur;
|
|
|
+ resultat.m_y = m_y * multiplicateur;
|
|
|
+ resultat.m_z = m_z * multiplicateur;
|
|
|
+
|
|
|
+ // Retour du résultat
|
|
|
+ return resultat;
|
|
|
+}
|
|
|
+
|
|
|
+Vec Vec::operator/(float diviseur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+ Vec resultat;
|
|
|
+
|
|
|
+ // Multiplication des coordonnées
|
|
|
+ resultat.m_x = m_x / diviseur;
|
|
|
+ resultat.m_y = m_y / diviseur;
|
|
|
+ resultat.m_z = m_z / diviseur;
|
|
|
+
|
|
|
+ // Retour du résultat
|
|
|
+ return resultat;
|
|
|
+}
|
|
|
+
|
|
|
+Vec Vec::operator*(const Vec &vecteur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+ Vec resultat;
|
|
|
+
|
|
|
+ // Produit Vectoriel
|
|
|
+ resultat.m_x = (m_y * vecteur.m_z) - (m_z * vecteur.m_y);
|
|
|
+ resultat.m_y = (m_z * vecteur.m_x) - (m_x * vecteur.m_z);
|
|
|
+ resultat.m_z = (m_x * vecteur.m_y) - (m_y * vecteur.m_x);
|
|
|
+
|
|
|
+ // Retour de l'objet
|
|
|
+ return resultat;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::operator*=(const Vec &vecteur)
|
|
|
+{
|
|
|
+ *this = *this * vecteur;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::operator-=(const Vec &vecteur)
|
|
|
+{
|
|
|
+ *this = *this - vecteur;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::operator+=(const Vec &vecteur)
|
|
|
+{
|
|
|
+ *this = *this + vecteur;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::operator*=(float multiplicateur)
|
|
|
+{
|
|
|
+ *this = *this * multiplicateur;
|
|
|
+}
|
|
|
+
|
|
|
+void Vec::operator/=(float multiplicateur)
|
|
|
+{
|
|
|
+ *this = *this * multiplicateur;
|
|
|
+}
|
|
|
+
|
|
|
+bool Vec::operator==(const Vec &vecteur)
|
|
|
+{
|
|
|
+ if(m_x == vecteur.getX() && m_y == vecteur.getY() && m_z == vecteur.getZ())
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool Vec::operator!=(const Vec &vecteur)
|
|
|
+{
|
|
|
+ if(*this == vecteur)
|
|
|
+ return false;
|
|
|
+ else
|
|
|
+ return true;
|
|
|
+}
|