|
@@ -0,0 +1,235 @@
|
|
|
+#include "Vecteur.h"
|
|
|
+#include <cmath>
|
|
|
+
|
|
|
+Vecteur::Vecteur() : m_x(0.0), m_y(0.0), m_z(0.0)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+Vecteur::Vecteur(float x, float y, float z) : m_x(x), m_y(y), m_z(z)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+Vecteur::Vecteur(const Vecteur &vecteur) : m_x(vecteur.getX()), m_y(vecteur.getY()), m_z(vecteur.getZ())
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+Vecteur::~Vecteur()
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+float Vecteur::getX() const
|
|
|
+{
|
|
|
+ return m_x;
|
|
|
+}
|
|
|
+
|
|
|
+float Vecteur::getY() const
|
|
|
+{
|
|
|
+ return m_y;
|
|
|
+}
|
|
|
+
|
|
|
+float Vecteur::getZ() const
|
|
|
+{
|
|
|
+ return m_z;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// Setters
|
|
|
+
|
|
|
+void Vecteur::setVecteur(float x, float y, float z)
|
|
|
+{
|
|
|
+ m_x = x;
|
|
|
+ m_y = y;
|
|
|
+ m_z = z;
|
|
|
+}
|
|
|
+
|
|
|
+void Vecteur::setX(float x)
|
|
|
+{
|
|
|
+ m_x = x;
|
|
|
+}
|
|
|
+
|
|
|
+void Vecteur::setY(float y)
|
|
|
+{
|
|
|
+ m_y = y;
|
|
|
+}
|
|
|
+
|
|
|
+void Vecteur::setZ(float z)
|
|
|
+{
|
|
|
+ m_z = z;
|
|
|
+}
|
|
|
+void Vecteur::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.0)
|
|
|
+ {
|
|
|
+ m_x /= longueur;
|
|
|
+ m_y /= longueur;
|
|
|
+ m_z /= longueur;
|
|
|
+ }
|
|
|
+}
|
|
|
+Vecteur& Vecteur::operator=(const Vecteur &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;
|
|
|
+}
|
|
|
+Vecteur Vecteur::operator+(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+
|
|
|
+ Vecteur 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;
|
|
|
+}
|
|
|
+Vecteur Vecteur::operator-(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+
|
|
|
+ Vecteur 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;
|
|
|
+}
|
|
|
+Vecteur Vecteur::operator*(float multiplicateur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+
|
|
|
+ Vecteur 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;
|
|
|
+}
|
|
|
+Vecteur Vecteur::operator/(float diviseur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+
|
|
|
+ Vecteur 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;
|
|
|
+}
|
|
|
+Vecteur Vecteur::operator*(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ // Création d'un objet résultat
|
|
|
+
|
|
|
+ Vecteur 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 Vecteur::operator*=(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ *this = *this * vecteur;
|
|
|
+}
|
|
|
+void Vecteur::operator-=(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ *this = *this - vecteur;
|
|
|
+}
|
|
|
+void Vecteur::operator+=(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ *this = *this + vecteur;
|
|
|
+}
|
|
|
+void Vecteur::operator*=(float multiplicateur)
|
|
|
+{
|
|
|
+ *this = *this * multiplicateur;
|
|
|
+}
|
|
|
+void Vecteur::operator/=(float multiplicateur)
|
|
|
+{
|
|
|
+ *this = *this * multiplicateur;
|
|
|
+}
|
|
|
+float Vecteur::scalair(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ Vecteur v1(*this), v2(vecteur);
|
|
|
+ v1.normaliser();
|
|
|
+ v2.normaliser();
|
|
|
+ return v1.getX() * v2.getX() + v1.getY() * v2.getY() + v1.getZ() * v2.getZ();
|
|
|
+}
|
|
|
+bool Vecteur::operator==(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ if(m_x == vecteur.getX() && m_y == vecteur.getY() && m_z == vecteur.getZ())
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+bool Vecteur::operator!=(const Vecteur &vecteur)
|
|
|
+{
|
|
|
+ if(*this == vecteur)
|
|
|
+ return false;
|
|
|
+ else
|
|
|
+ return true;
|
|
|
+}
|
|
|
+double Vecteur::norme()
|
|
|
+{
|
|
|
+ return sqrt(m_x*m_x+m_y*m_y+m_z*m_z);
|
|
|
+}
|
|
|
+void Vecteur::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 Vecteur::rotateD(float angle)
|
|
|
+{
|
|
|
+ float _angle = angle*M_PI/180;
|
|
|
+ float tmp = m_x;
|
|
|
+ m_x = cos(_angle)*m_x-sin(_angle)*m_y;
|
|
|
+ m_y = sin(_angle)*tmp+cos(_angle)*m_y;
|
|
|
+}
|