Hauptseite | Liste aller Namensbereiche | Klassenhierarchie | Auflistung der Klassen | Auflistung der Dateien | Elemente eines Namensbereiches | Klassen-Elemente | Datei-Elemente

Vector2D.h

gehe zur Dokumentation dieser Datei
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 #ifndef _ZFXMATH_INCLUDE_VECTOR2D_H_ 00015 #define _ZFXMATH_INCLUDE_VECTOR2D_H_ 00016 00017 namespace ZFXMath 00018 { 00019 00020 template<typename T> 00021 struct TVector3D; 00022 template<typename T> 00023 struct TVector4D; 00024 00034 template<typename T> 00035 struct TVector2D 00036 { 00037 union 00038 { 00039 T val[2]; 00040 struct 00041 { 00042 T x, y; 00043 }; 00044 struct 00045 { 00046 T u, v; 00047 }; 00048 }; 00049 00050 TVector2D() {}; 00051 00052 TVector2D( const T& _x, const T& _y ) { x=_x; y=_y; } 00053 00054 TVector2D( const T* pV ) { x = pV[0]; y = pV[1]; } 00055 TVector2D( const T& val ) { x = y = val; } 00056 TVector2D( const TVector2D& v ) { x = v.x; y = v.y; } 00057 TVector2D( const TVector3D<T>& v ) { x = v.x; y = v.y; } 00058 TVector2D( const TVector4D<T>& v ) { x = v.x; y = v.y; } 00059 00060 00066 operator T* () { return val; } 00067 operator const T* () const { return val; } 00068 00074 T operator () ( const int i ) const 00075 { 00076 return val[ Check( i ) ]; 00077 } 00078 00084 T& operator () ( const int i ) 00085 { 00086 return val[ Check( i ) ]; 00087 } 00088 00094 TVector2D& operator = ( const T& val ) { x = y = val; return *this; } 00095 TVector2D& operator += ( const TVector2D& v ) { x += v.x; y += v.y; return *this; } 00096 TVector2D& operator -= ( const TVector2D& v ) { x -= v.x; y -= v.y; return *this; } 00097 TVector2D& operator *= ( const TVector2D& v ) { x *= v.x; y *= v.y; return *this; } 00098 TVector2D& operator /= ( const TVector2D& v ) { x /= v.x; y /= v.y; return *this; } 00099 00105 TVector2D& operator *= ( const T& v ) { x *= v; y *= v; return *this; } 00106 TVector2D& operator /= ( const T& v ) { x /= v; y /= v; return *this; } 00107 00113 TVector2D operator + () const { return *this; } 00114 TVector2D operator - () const { return TVector2D( -x, -y ); } 00115 00121 TVector2D operator + ( const TVector2D& v ) const { return TVector2D( x + v.x, y + v.y ); } 00122 TVector2D operator - ( const TVector2D& v ) const { return TVector2D( x - v.x, y - v.y ); } 00123 TVector2D operator * ( const TVector2D& v ) const { return TVector2D( x * v.x, y * v.y ); } 00124 TVector2D operator / ( const TVector2D& v ) const { return TVector2D( x / v.x, y / v.y ); } 00125 TVector2D operator * ( const T& v ) const { return TVector2D( x * v, y * v ); } 00126 TVector2D operator / ( const T& v ) const { return TVector2D( x / v, y / v ); } 00127 friend TVector2D<T> operator * ( const T& val, const TVector2D<T>& vec ) 00128 { return (TVector2D) ( vec.x * val, vec.y * val ); } 00129 00135 T LengthSqr() 00136 { 00137 return DotProduct( *this ); 00138 }; 00139 00145 T Length() 00146 { 00147 return Sqrt( LengthSqr() ); 00148 }; 00149 00161 void Normalize() 00162 { 00163 (*this) /= Length(); 00164 }; 00165 00171 T DotProduct( const TVector2D& v ) const { return v.x * x + v.y * y; } 00172 00182 TVector2D Reflect( const TVector2D& n ) const 00183 { 00184 return TVector2D( (*this) - 2 * DotProduct( n ) * n ); 00185 } 00186 00198 TVector2D Refract( const TVector2D& n, const T& ri ) const 00199 { 00200 return Interpolate( (*this), n, 1 - ri ).Normalize(); 00201 } 00202 00203 private: 00204 inline int Check( const int index ) const 00205 { 00206 // Check bounds in debug build 00207 assert( index >= 0 && index < 2 ); 00208 00209 return (index); 00210 } 00211 }; 00212 } 00213 00214 #endif //_ZFXMATH_INCLUDE_VECTOR2D_H_ 00215 00216 00217 00218

Erzeugt am Thu Nov 25 04:02:55 2004 für ZFX-Math Library von doxygen 1.3.8