Vecteur.h 5.3 KB

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