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 00030 struct Vector3POD 00031 { 00032 //============================================================ 00034 00035 static const Vector3POD Zero(); 00036 static const Vector3POD One(); 00037 static const Vector3POD Min(); 00038 static const Vector3POD Max(); 00039 static const Vector3POD UnitX(); 00040 static const Vector3POD UnitY(); 00041 static const Vector3POD UnitZ(); 00042 static const Vector3POD NegUnitX(); 00043 static const Vector3POD NegUnitY(); 00044 static const Vector3POD NegUnitZ(); 00045 00046 00047 //============================================================ 00049 00050 f32 x; 00051 f32 y; 00052 f32 z; 00053 00054 00055 //============================================================ 00057 00058 const Vector2POD toXY()const; 00059 const Vector2POD toXX()const; 00060 const Vector2POD toYY()const; 00061 const Vector2POD toZZ()const; 00062 const Vector3POD toX00()const; 00063 const Vector3POD toXY0()const; 00064 const Vector3POD to0Y0()const; 00065 const Vector3POD to0YZ()const; 00066 const Vector3POD to00Z()const; 00067 const Vector3POD toXXX()const; 00068 const Vector3POD toYYY()const; 00069 const Vector3POD toZZZ()const; 00070 const Vector4POD toXYZ0()const; 00071 const Vector4POD toXXXX()const; 00072 const Vector4POD toYYYY()const; 00073 const Vector4POD toZZZZ()const; 00075 00076 //============================================================ 00078 00079 bool equals( const Vector3POD& )const; 00080 bool equalsStrict( const Vector3POD& )const; 00081 00082 00083 //============================================================ 00085 00086 const Vector3POD add( f32 )const; 00087 const Vector3POD sub( f32 )const; 00088 const Vector3POD mul( f32 )const; 00089 const Vector3POD div( f32 )const; 00090 const Vector3POD add( const Vector3POD& )const; 00091 const Vector3POD sub( const Vector3POD& )const; 00092 const Vector3POD mul( const Vector3POD& )const; 00093 const Vector3POD div( const Vector3POD& )const; 00094 void addAssign( f32 ); 00095 void subAssign( f32 ); 00096 void mulAssign( f32 ); 00097 void divAssign( f32 ); 00098 void addAssign( const Vector3POD& ); 00099 void subAssign( const Vector3POD& ); 00100 void mulAssign( const Vector3POD& ); 00101 void divAssign( const Vector3POD& ); 00102 00103 00104 //============================================================ 00106 00107 const Vector3POD operator+( f32 )const; 00108 const Vector3POD operator-( f32 )const; 00109 const Vector3POD operator*( f32 )const; 00110 const Vector3POD operator/( f32 )const; 00111 const Vector3POD operator+( const Vector3POD& )const; 00112 const Vector3POD operator-( const Vector3POD& )const; 00113 const Vector3POD operator*( const Vector3POD& )const; 00114 const Vector3POD operator/( const Vector3POD& )const; 00115 const Vector3POD operator-()const; 00116 Vector3POD& operator+=( f32 ); 00117 Vector3POD& operator-=( f32 ); 00118 Vector3POD& operator*=( f32 ); 00119 Vector3POD& operator/=( f32 ); 00120 Vector3POD& operator+=( const Vector3POD& ); 00121 Vector3POD& operator-=( const Vector3POD& ); 00122 Vector3POD& operator*=( const Vector3POD& ); 00123 Vector3POD& operator/=( const Vector3POD& ); 00124 00125 00126 //============================================================ 00128 00129 const Vector3POD min( const Vector3POD& )const; 00130 const Vector3POD max( const Vector3POD& )const; 00131 00132 00133 //============================================================ 00135 00136 const Vector3POD clamp( const Vector3POD& aMin , const Vector3POD& aMax )const; 00137 const Vector3POD clampPositive()const; 00138 const Vector3POD clampNegative()const; 00139 00140 00141 //============================================================ 00143 00144 const Vector3POD abs()const; 00145 const Vector3POD neg()const; 00146 00147 00148 //============================================================ 00150 00151 f32 squareLength()const; 00152 f32 length()const; 00153 f32 distance( const Vector3POD& )const; 00154 bool isZero()const; 00155 bool isZeroStrict()const; 00156 bool isUnit()const; 00157 const Vector3POD unit()const; 00158 void unitAssign(); 00159 00160 00161 //============================================================ 00163 00164 f32 dot( const Vector3POD& )const; 00165 const Vector3POD cross( const Vector3POD& )const; 00166 00167 00168 //============================================================ 00170 00171 00172 const ShortString toShortString()const; 00174 }; 00175 00177 class Vector3 : public Vector3POD 00178 { 00179 public: 00180 //============================================================ 00182 00183 Vector3(); 00184 Vector3( const Vector3POD& aXYZ ); 00185 Vector3( f32 aV ); 00186 Vector3( const Vector2POD& aXY , f32 aZ ); 00187 Vector3( f32 aX , f32 aY , f32 aZ ); 00188 00189 }; 00190 00192 typedef Vector3POD Vec3; 00193 00195 typedef Vector3POD Vector3fPOD; 00196 00198 typedef Vec3 Vec3f; 00199 00201 typedef Vector3 Vector3f; 00203 } 00204 //------------------------------------------------------------ 00205 #endif 00206 // EOF