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

Vector3D.h

gehe zur Dokumentation dieser Datei
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 #ifndef _ZFXMATH_INCLUDE_VECTOR3D_H_ 00015 #define _ZFXMATH_INCLUDE_VECTOR3D_H_ 00016 00017 namespace ZFXMath 00018 { 00019 00020 template<typename T> 00021 struct TVector4D; 00022 00034 template<typename T> 00035 struct TVector3D 00036 { 00037 union 00038 { 00039 T val[3]; 00040 struct 00041 { 00042 T x, y, z; 00043 }; 00044 struct 00045 { 00046 T r, g, b; 00047 }; 00048 }; 00049 00050 TVector3D() {}; 00051 00052 TVector3D( const T& _x, const T& _y, const T& _z ) { x=_x; y=_y; z=_z; } 00053 00054 TVector3D( const T* pV ) { x = pV[0]; y = pV[1]; z = pV[2]; } 00055 TVector3D( const T& val ) { x = y = z = val; } 00056 TVector3D( const TVector3D& v ) { x = v.x; y = v.y; z = v.z; } 00057 TVector3D( const TVector2D<T>& v, const T& _z ) { x = v.x; y = v.y; z = _z; } 00058 TVector3D( const TVector4D<T>& v ) { x = v.x; y = v.y; z = v.z; } 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 TVector3D& operator = ( const T& val ) { x = y = z = val; return *this; } 00095 TVector3D& operator += ( const TVector3D& v ) { x += v.x; y += v.y; z += v.z; return *this; } 00096 TVector3D& operator -= ( const TVector3D& v ) { x -= v.x; y -= v.y; z -= v.z; return *this; } 00097 TVector3D& operator *= ( const TVector3D& v ) { x *= v.x; y *= v.y; z *= v.z; return *this; } 00098 TVector3D& operator /= ( const TVector3D& v ) { x /= v.x; y /= v.y; z /= v.z; return *this; } 00099 00105 TVector3D& operator *= ( const T& v ) { x *= v; y *= v; z *= v; return *this; } 00106 TVector3D& operator /= ( const T& v ) { x /= v; y /= v; z /= v; return *this; } 00107 00113 TVector3D operator + () const { return *this; } 00114 TVector3D operator - () const { return TVector3D(-x,-y,-z); } 00115 00121 TVector3D operator + ( const TVector3D& v ) const { return TVector3D( x + v.x, y + v.y, z + v.z ); } 00122 TVector3D operator - ( const TVector3D& v ) const { return TVector3D( x - v.x, y - v.y, z - v.z ); } 00123 TVector3D operator * ( const TVector3D& v ) const { return TVector3D( x * v.x, y * v.y, z * v.z ); } 00124 TVector3D operator / ( const TVector3D& v ) const { return TVector3D( x / v.x, y / v.y, z / v.z ); } 00125 TVector3D operator * ( const T& v ) const { return TVector3D( x * v, y * v, z * v ); } 00126 TVector3D operator / ( const T& v ) const { return TVector3D( x / v, y / v, z / v ); } 00127 friend TVector3D<T> operator * ( const T& val, const TVector3D<T>& vec ) { return TVector3D( vec.x * val, vec.y * val, vec.z * val ); } 00128 00134 unsigned long ColorToDWORD( T alpha = 1.0 ) 00135 { 00136 ARGB color( r, g, b, alpha ); 00137 00138 return color; 00139 }; 00140 00146 unsigned long ToDWORD( T w = 0.0 ) 00147 { 00148 ARGB packedVector( x * 0.5 + 0.5, 00149 y * 0.5 + 0.5, 00150 z * 0.5 + 0.5, 00151 w * 0.5 + 0.5 ); 00152 00153 return packedVector; 00154 }; 00155 00161 T LengthSqr() 00162 { 00163 return DotProduct( *this ); 00164 }; 00165 00171 T Length() 00172 { 00173 return Sqrt( LengthSqr() ); 00174 }; 00175 00187 TVector3D& Normalize() 00188 { 00189 return (*this) /= Length(); 00190 }; 00191 00197 T DotProduct( const TVector3D& v ) const { return v.x * x + v.y * y + v.z * z; } 00198 00204 T Luminance() const { return DotProduct( TVector3D( T(0.39), T(0.5), T(0.11) ) ); } 00205 00206 00216 TVector3D Reflect( const TVector3D& n ) const 00217 { 00218 return TVector3D( (*this) - 2 * DotProduct( n ) * n ); 00219 } 00220 00232 TVector3D Refract( const TVector3D& n, const T& ri ) const 00233 { 00234 T cos = DotProduct( n ) * ri; 00235 00236 return Interpolate( (*this), n, cos ).Normalize(); 00237 } 00238 00239 private: 00240 inline int Check( const int index ) const 00241 { 00242 // Check bounds in debug build 00243 assert( index >= 0 && index < 3 ); 00244 00245 return (index); 00246 } 00247 }; 00248 } 00249 00250 #endif //_ZFXMATH_INCLUDE_VECTOR3D_H_ 00251 00252 00253 00254

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