CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_VECTOR3_HPP) 00007 #else 00008 #define XBASE_INCLUDED_VECTOR3_HPP 00009 00010 //------------------------------------------------------------ 00011 #include <XBase/BuiltInTypes.hpp> 00012 #include <XBase/ShortString.hpp> 00013 00014 //------------------------------------------------------------ 00015 namespace XBase { 00016 struct Vector2POD; 00017 struct Vector4POD; 00018 } 00019 00020 //------------------------------------------------------------ 00021 namespace XBase { 00023 00024 00028 struct Vector3POD 00029 { 00030 //============================================================ 00032 00033 static const Vector3POD Zero(); 00034 static const Vector3POD One(); 00035 static const Vector3POD Min(); 00036 static const Vector3POD Max(); 00037 static const Vector3POD UnitX(); 00038 static const Vector3POD UnitY(); 00039 static const Vector3POD UnitZ(); 00040 static const Vector3POD NegUnitX(); 00041 static const Vector3POD NegUnitY(); 00042 static const Vector3POD NegUnitZ(); 00043 00044 00045 //============================================================ 00047 00048 f32 x; 00049 f32 y; 00050 f32 z; 00051 00052 00053 //============================================================ 00055 00056 const Vector2POD toXY()const; 00057 const Vector2POD toXX()const; 00058 const Vector2POD toYY()const; 00059 const Vector2POD toZZ()const; 00060 const Vector3POD toX00()const; 00061 const Vector3POD toXY0()const; 00062 const Vector3POD to0Y0()const; 00063 const Vector3POD to0YZ()const; 00064 const Vector3POD to00Z()const; 00065 const Vector3POD toXXX()const; 00066 const Vector3POD toYYY()const; 00067 const Vector3POD toZZZ()const; 00068 const Vector4POD toXYZ0()const; 00069 const Vector4POD toXXXX()const; 00070 const Vector4POD toYYYY()const; 00071 const Vector4POD toZZZZ()const; 00073 00074 //============================================================ 00076 00077 bool equals( const Vector3POD& )const; 00078 bool equalsStrict( const Vector3POD& )const; 00079 00080 00081 //============================================================ 00083 00084 const Vector3POD add( f32 )const; 00085 const Vector3POD sub( f32 )const; 00086 const Vector3POD mul( f32 )const; 00087 const Vector3POD div( f32 )const; 00088 const Vector3POD add( const Vector3POD& )const; 00089 const Vector3POD sub( const Vector3POD& )const; 00090 const Vector3POD mul( const Vector3POD& )const; 00091 const Vector3POD div( const Vector3POD& )const; 00092 void addAssign( f32 ); 00093 void subAssign( f32 ); 00094 void mulAssign( f32 ); 00095 void divAssign( f32 ); 00096 void addAssign( const Vector3POD& ); 00097 void subAssign( const Vector3POD& ); 00098 void mulAssign( const Vector3POD& ); 00099 void divAssign( const Vector3POD& ); 00100 00101 00102 //============================================================ 00104 00105 const Vector3POD operator+( f32 )const; 00106 const Vector3POD operator-( f32 )const; 00107 const Vector3POD operator*( f32 )const; 00108 const Vector3POD operator/( f32 )const; 00109 const Vector3POD operator+( const Vector3POD& )const; 00110 const Vector3POD operator-( const Vector3POD& )const; 00111 const Vector3POD operator*( const Vector3POD& )const; 00112 const Vector3POD operator/( const Vector3POD& )const; 00113 const Vector3POD operator-()const; 00114 Vector3POD& operator+=( f32 ); 00115 Vector3POD& operator-=( f32 ); 00116 Vector3POD& operator*=( f32 ); 00117 Vector3POD& operator/=( f32 ); 00118 Vector3POD& operator+=( const Vector3POD& ); 00119 Vector3POD& operator-=( const Vector3POD& ); 00120 Vector3POD& operator*=( const Vector3POD& ); 00121 Vector3POD& operator/=( const Vector3POD& ); 00122 00123 00124 //============================================================ 00126 00127 const Vector3POD min( const Vector3POD& )const; 00128 const Vector3POD max( const Vector3POD& )const; 00129 00130 00131 //============================================================ 00133 00134 const Vector3POD clamp( const Vector3POD& aMin , const Vector3POD& aMax )const; 00135 const Vector3POD clampPositive()const; 00136 const Vector3POD clampNegative()const; 00137 00138 00139 //============================================================ 00141 00142 const Vector3POD abs()const; 00143 const Vector3POD neg()const; 00144 00145 00146 //============================================================ 00148 00149 f32 squareLength()const; 00150 f32 length()const; 00151 f32 distance( const Vector3POD& )const; 00152 bool isZero()const; 00153 bool isZeroStrict()const; 00154 bool isUnit()const; 00155 const Vector3POD unit()const; 00156 void unitAssign(); 00157 00158 00159 //============================================================ 00161 00162 f32 dot( const Vector3POD& )const; 00163 const Vector3POD cross( const Vector3POD& )const; 00164 00165 00166 //============================================================ 00168 00169 00170 const ShortString toShortString()const; 00172 }; 00173 00175 class Vector3 : public Vector3POD 00176 { 00177 public: 00178 //============================================================ 00180 00181 Vector3(); 00182 Vector3( const Vector3POD& aXYZ ); 00183 Vector3( f32 aX , f32 aY , f32 aZ ); 00184 00185 }; 00186 00188 typedef Vector3POD Vector3fPOD; 00189 00191 typedef Vector3 Vector3f; 00193 } 00194 //------------------------------------------------------------ 00195 #endif 00196 // EOF