Vec3.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #ifndef Vec3_H
  2. #define Vec3_H
  3. #include "FrameworkMath.h"
  4. namespace Framework
  5. {
  6. template< typename T >
  7. class Vec3
  8. {
  9. public:
  10. T x;
  11. T y;
  12. T z;
  13. // Konstruktor
  14. inline Vec3()
  15. {
  16. }
  17. inline Vec3( T x, T y, T z )
  18. : x( x ),
  19. y( y ),
  20. z( z )
  21. {
  22. }
  23. inline Vec3( const Vec3 &vect )
  24. : Vec3( vect.x, vect.y, vect.z )
  25. {
  26. }
  27. // nicht constant
  28. inline Vec3 &normalize()
  29. {
  30. const T länge = län();
  31. x /= länge;
  32. y /= länge;
  33. z /= länge;
  34. return *this;
  35. }
  36. inline Vec3 &Swap( Vec3 &vect )
  37. {
  38. const Vec3 tmp = vect;
  39. vect = *this;
  40. *this = tmp;
  41. return *this;
  42. }
  43. inline Vec3 operator=( const Vec3 &r )
  44. {
  45. x = r.x;
  46. y = r.y;
  47. z = r.z;
  48. return *this;
  49. }
  50. inline Vec3 operator+=( const Vec3 &r )
  51. {
  52. x += r.x;
  53. y += r.y;
  54. z += r.z;
  55. return *this;
  56. }
  57. inline Vec3 operator-=( const Vec3 &r )
  58. {
  59. x -= r.x;
  60. y -= r.y;
  61. z -= r.z;
  62. return *this;
  63. }
  64. inline Vec3 operator*=( const T &r )
  65. {
  66. x *= r;
  67. y *= r;
  68. z *= r;
  69. return *this;
  70. }
  71. inline Vec3 operator/=( const T &r )
  72. {
  73. x /= r;
  74. y /= r;
  75. z /= r;
  76. return *this;
  77. }
  78. // constant
  79. inline T abstandSq( const Vec3 &p ) const
  80. {
  81. return ( x - p.x ) * ( x - p.x ) + ( y - p.y ) * ( y - p.y ) + ( z - p.z ) * ( z - p.z );
  82. }
  83. inline T abstand( const Vec3 &p ) const
  84. {
  85. return sqrt( abstandSq( p ) );
  86. }
  87. inline Vec3 operator-( ) const
  88. {
  89. return{ -x, -y, -z };
  90. }
  91. template< typename T2 >
  92. inline operator Vec3< T2 >() const
  93. {
  94. return{ (T2)x, (T2)y, (T2)z };
  95. }
  96. inline T länSq() const
  97. {
  98. return *this * *this;
  99. }
  100. inline T län() const
  101. {
  102. return sqrt( länSq() );
  103. }
  104. inline T operator*( const Vec3 &r ) const
  105. {
  106. return x * r.x + y * r.y + z * r.z;
  107. }
  108. inline Vec3 operator+( const Vec3 &r ) const
  109. {
  110. return Vec3( *this ) += r;
  111. }
  112. inline Vec3 operator-( const Vec3 &r ) const
  113. {
  114. return Vec3( *this ) -= r;
  115. }
  116. inline Vec3 operator*( const T &r ) const
  117. {
  118. return Vec3( *this ) *= r;
  119. }
  120. inline Vec3 operator/( const T &r ) const
  121. {
  122. return Vec3( *this ) /= r;
  123. }
  124. inline bool operator==( const Vec3 &r ) const
  125. {
  126. return x == r.x && y == r.y && z == r.z;
  127. }
  128. inline bool operator!=( const Vec3 &r ) const
  129. {
  130. return !( *this == r );
  131. }
  132. };
  133. }
  134. #endif