Vec3.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #ifndef Vec3_H
  2. #define Vec3_H
  3. #include "FrameworkMath.h"
  4. namespace Framework
  5. {
  6. template< typename T >
  7. // Ein 3D Vektor
  8. class Vec3
  9. {
  10. public:
  11. T x; // X Komponente des Vektors
  12. T y; // y Komponente des Vektors
  13. T z; // z Komponente des Vektors
  14. // Konstruktor
  15. inline Vec3()
  16. {
  17. }
  18. // Konstruktor
  19. // x: Die X Komponente des neuen Vektors
  20. // y: Die Y Komponente des neuen Vektors
  21. // z: Die Z Komponente des neuen Vektors
  22. inline Vec3( T x, T y, T z )
  23. : x( x ),
  24. y( y ),
  25. z( z )
  26. {
  27. }
  28. // Konstruktor
  29. // vect: Ein Vektor, dessen Werte kopiert werden sollen
  30. inline Vec3( const Vec3 &vect )
  31. : Vec3( vect.x, vect.y, vect.z )
  32. {
  33. }
  34. // Skalliert den Vektor, so dass er die Länge 1 hat
  35. inline Vec3 &normalize()
  36. {
  37. const T länge = län();
  38. x /= länge;
  39. y /= länge;
  40. z /= länge;
  41. return *this;
  42. }
  43. // Vertaucht die Werte des Vektors mit denen eines anderen Vektor
  44. // vect: Der andere Vektor
  45. inline Vec3 &Swap( Vec3 &vect )
  46. {
  47. const Vec3 tmp = vect;
  48. vect = *this;
  49. *this = tmp;
  50. return *this;
  51. }
  52. // Kopiert die Werte eines anderen Vektors
  53. // r: Der andere Vektor
  54. inline Vec3 operator=( const Vec3 &r )
  55. {
  56. x = r.x;
  57. y = r.y;
  58. z = r.z;
  59. return *this;
  60. }
  61. // Addiert einen anderen Vektor zu diesem Hinzu
  62. // r: Der andere Vektor
  63. inline Vec3 operator+=( const Vec3 &r )
  64. {
  65. x += r.x;
  66. y += r.y;
  67. z += r.z;
  68. return *this;
  69. }
  70. // Zieht einen anderen Vektor von diesem ab
  71. // r: Der andere Vektor
  72. inline Vec3 operator-=( const Vec3 &r )
  73. {
  74. x -= r.x;
  75. y -= r.y;
  76. z -= r.z;
  77. return *this;
  78. }
  79. // Skalliert diesen Vektor
  80. // r: Der Faktor
  81. inline Vec3 operator*=( const T &r )
  82. {
  83. x *= r;
  84. y *= r;
  85. z *= r;
  86. return *this;
  87. }
  88. // Skalliert diesen Vektor mit 1/Faktor
  89. // r: Der Faktor
  90. inline Vec3 operator/=( const T &r )
  91. {
  92. x /= r;
  93. y /= r;
  94. z /= r;
  95. return *this;
  96. }
  97. // Errechnet das Quadrat des Abstands zwischen zewi Vektoren
  98. // p: Der andere Vektor
  99. inline T abstandSq( const Vec3 &p ) const
  100. {
  101. return ( x - p.x ) * ( x - p.x ) + ( y - p.y ) * ( y - p.y ) + ( z - p.z ) * ( z - p.z );
  102. }
  103. // Errechnet den Abstand zwischen zwei Vektoren
  104. // p: Der andere Vektor
  105. inline T abstand( const Vec3 &p ) const
  106. {
  107. return sqrt( abstandSq( p ) );
  108. }
  109. // Gibt einen neuen Vektor zurück, der die negation von diesem ist
  110. inline Vec3 operator-( ) const
  111. {
  112. return{ -x, -y, -z };
  113. }
  114. template< typename T2 >
  115. // Konvertiert den Typ des Vektors in einen anderen
  116. inline operator Vec3< T2 >() const
  117. {
  118. return{ (T2)x, (T2)y, (T2)z };
  119. }
  120. // Errechnet das Quadrat der Länge des Vektors
  121. inline T länSq() const
  122. {
  123. return *this * *this;
  124. }
  125. // Errechnet due Länge des Vektors
  126. inline T län() const
  127. {
  128. return sqrt( länSq() );
  129. }
  130. // Bildet das Skalarprodukt zwischen zwei Vektoren
  131. // r: Der andere Vektor
  132. inline T operator*( const Vec3 &r ) const
  133. {
  134. return x * r.x + y * r.y + z * r.z;
  135. }
  136. // Errechnet die Summe zweier Vektoren
  137. // r: Der andere Vektor
  138. inline Vec3 operator+( const Vec3 &r ) const
  139. {
  140. return Vec3( *this ) += r;
  141. }
  142. // Zieht zwei Vektoren von einander ab
  143. // r: Der andere Vektor
  144. inline Vec3 operator-( const Vec3 &r ) const
  145. {
  146. return Vec3( *this ) -= r;
  147. }
  148. // Skalliert den Vektor ohne ihn zu verändern
  149. // r: Der Faktor
  150. inline Vec3 operator*( const T &r ) const
  151. {
  152. return Vec3( *this ) *= r;
  153. }
  154. // Skalliert den Vektor mit 1/Faktor ohne ihn zu Verändern
  155. // r: Der Faktor
  156. inline Vec3 operator/( const T &r ) const
  157. {
  158. return Vec3( *this ) /= r;
  159. }
  160. // Überprüft zwei Vektoren auf Gleichheit
  161. // r: Der andere Vektor
  162. inline bool operator==( const Vec3 &r ) const
  163. {
  164. return x == r.x && y == r.y && z == r.z;
  165. }
  166. // Überprüft zwei Vektoren auf Ungleichheit
  167. // r: Der andere Vektor
  168. inline bool operator!=( const Vec3 &r ) const
  169. {
  170. return !( *this == r );
  171. }
  172. };
  173. }
  174. #endif