Vecteur.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #include "Vecteur.h"
  2. #include <cmath>
  3. Vecteur::Vecteur() : m_x(0.0), m_y(0.0), m_z(0.0)
  4. {
  5. }
  6. Vecteur::Vecteur(float x, float y, float z) : m_x(x), m_y(y), m_z(z)
  7. {
  8. }
  9. Vecteur::Vecteur(const Vecteur &vecteur) : m_x(vecteur.getX()), m_y(vecteur.getY()), m_z(vecteur.getZ())
  10. {
  11. }
  12. Vecteur::~Vecteur()
  13. {
  14. }
  15. float Vecteur::getX() const
  16. {
  17. return m_x;
  18. }
  19. float Vecteur::getY() const
  20. {
  21. return m_y;
  22. }
  23. float Vecteur::getZ() const
  24. {
  25. return m_z;
  26. }
  27. // Setters
  28. void Vecteur::setVecteur(float x, float y, float z)
  29. {
  30. m_x = x;
  31. m_y = y;
  32. m_z = z;
  33. }
  34. void Vecteur::setX(float x)
  35. {
  36. m_x = x;
  37. }
  38. void Vecteur::setY(float y)
  39. {
  40. m_y = y;
  41. }
  42. void Vecteur::setZ(float z)
  43. {
  44. m_z = z;
  45. }
  46. void Vecteur::normaliser()
  47. {
  48. // La fonction sqrt() permet de trouver la racine carré d'un nombre
  49. float longueur (sqrt(m_x * m_x + m_y * m_y + m_z * m_z));
  50. // Normalisation du vecteur
  51. if(longueur != 0.0)
  52. {
  53. m_x /= longueur;
  54. m_y /= longueur;
  55. m_z /= longueur;
  56. }
  57. }
  58. Vecteur& Vecteur::operator=(const Vecteur &vecteur)
  59. {
  60. // Copie des valeurs
  61. m_x = vecteur.m_x;
  62. m_y = vecteur.m_y;
  63. m_z = vecteur.m_z;
  64. // Retour de l'objet
  65. return *this;
  66. }
  67. Vecteur Vecteur::operator+(const Vecteur &vecteur)
  68. {
  69. // Création d'un objet résultat
  70. Vecteur resultat;
  71. // Addition des coordonnées
  72. resultat.m_x = m_x + vecteur.m_x;
  73. resultat.m_y = m_y + vecteur.m_y;
  74. resultat.m_z = m_z + vecteur.m_z;
  75. // Retour de résultat
  76. return resultat;
  77. }
  78. Vecteur Vecteur::operator-(const Vecteur &vecteur)
  79. {
  80. // Création d'un objet résultat
  81. Vecteur resultat;
  82. // Soustraction des coordonnées
  83. resultat.m_x = m_x - vecteur.m_x;
  84. resultat.m_y = m_y - vecteur.m_y;
  85. resultat.m_z = m_z - vecteur.m_z;
  86. // Retour de résultat
  87. return resultat;
  88. }
  89. Vecteur Vecteur::operator*(float multiplicateur)
  90. {
  91. // Création d'un objet résultat
  92. Vecteur resultat;
  93. // Multiplication des coordonnées
  94. resultat.m_x = m_x * multiplicateur;
  95. resultat.m_y = m_y * multiplicateur;
  96. resultat.m_z = m_z * multiplicateur;
  97. // Retour du résultat
  98. return resultat;
  99. }
  100. Vecteur Vecteur::operator/(float diviseur)
  101. {
  102. // Création d'un objet résultat
  103. Vecteur resultat;
  104. // Multiplication des coordonnées
  105. resultat.m_x = m_x / diviseur;
  106. resultat.m_y = m_y / diviseur;
  107. resultat.m_z = m_z / diviseur;
  108. // Retour du résultat
  109. return resultat;
  110. }
  111. Vecteur Vecteur::operator*(const Vecteur &vecteur)
  112. {
  113. // Création d'un objet résultat
  114. Vecteur resultat;
  115. // Produit Vectoriel
  116. resultat.m_x = (m_y * vecteur.m_z) - (m_z * vecteur.m_y);
  117. resultat.m_y = (m_z * vecteur.m_x) - (m_x * vecteur.m_z);
  118. resultat.m_z = (m_x * vecteur.m_y) - (m_y * vecteur.m_x);
  119. // Retour de l'objet
  120. return resultat;
  121. }
  122. void Vecteur::operator*=(const Vecteur &vecteur)
  123. {
  124. *this = *this * vecteur;
  125. }
  126. void Vecteur::operator-=(const Vecteur &vecteur)
  127. {
  128. *this = *this - vecteur;
  129. }
  130. void Vecteur::operator+=(const Vecteur &vecteur)
  131. {
  132. *this = *this + vecteur;
  133. }
  134. void Vecteur::operator*=(float multiplicateur)
  135. {
  136. *this = *this * multiplicateur;
  137. }
  138. void Vecteur::operator/=(float multiplicateur)
  139. {
  140. *this = *this * multiplicateur;
  141. }
  142. float Vecteur::scalair(const Vecteur &vecteur)
  143. {
  144. Vecteur v1(*this), v2(vecteur);
  145. v1.normaliser();
  146. v2.normaliser();
  147. return v1.getX() * v2.getX() + v1.getY() * v2.getY() + v1.getZ() * v2.getZ();
  148. }
  149. bool Vecteur::operator==(const Vecteur &vecteur)
  150. {
  151. if(m_x == vecteur.getX() && m_y == vecteur.getY() && m_z == vecteur.getZ())
  152. return true;
  153. else
  154. return false;
  155. }
  156. bool Vecteur::operator!=(const Vecteur &vecteur)
  157. {
  158. if(*this == vecteur)
  159. return false;
  160. else
  161. return true;
  162. }
  163. double Vecteur::norme()
  164. {
  165. return sqrt(m_x*m_x+m_y*m_y+m_z*m_z);
  166. }
  167. void Vecteur::rotateR(float angle)
  168. {
  169. float tmp = m_x;
  170. m_x = cos(angle)*m_x-sin(angle)*m_y;
  171. m_y = sin(angle)*tmp+cos(angle)*m_y;
  172. }
  173. void Vecteur::rotateD(float angle)
  174. {
  175. float _angle = angle*M_PI/180;
  176. float tmp = m_x;
  177. m_x = cos(_angle)*m_x-sin(_angle)*m_y;
  178. m_y = sin(_angle)*tmp+cos(_angle)*m_y;
  179. }