Vecteur.cpp 3.9 KB

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