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 UnitX(); 00036 static const Vector3POD UnitY(); 00037 static const Vector3POD UnitZ(); 00038 static const Vector3POD NegUnitX(); 00039 static const Vector3POD NegUnitY(); 00040 static const Vector3POD NegUnitZ(); 00041 00042 00043 //============================================================ 00045 00046 f32 x; 00047 f32 y; 00048 f32 z; 00049 00050 00051 //============================================================ 00053 00054 const Vector2POD toXY()const; 00055 const Vector2POD toXX()const; 00056 const Vector2POD toYY()const; 00057 const Vector2POD toZZ()const; 00058 const Vector3POD toXOO()const; 00059 const Vector3POD toXYO()const; 00060 const Vector3POD toOYO()const; 00061 const Vector3POD toOYZ()const; 00062 const Vector3POD toOOZ()const; 00063 const Vector3POD toXXX()const; 00064 const Vector3POD toYYY()const; 00065 const Vector3POD toZZZ()const; 00066 const Vector4POD toXYZO()const; 00067 const Vector4POD toXXXX()const; 00068 const Vector4POD toYYYY()const; 00069 const Vector4POD toZZZZ()const; 00071 00072 //============================================================ 00074 00075 bool equals( const Vector3POD& )const; 00076 bool equalsStrict( const Vector3POD& )const; 00077 00078 00079 //============================================================ 00081 00082 const Vector3POD add( f32 )const; 00083 const Vector3POD sub( f32 )const; 00084 const Vector3POD mul( f32 )const; 00085 const Vector3POD div( f32 )const; 00086 const Vector3POD add( const Vector3POD& )const; 00087 const Vector3POD sub( const Vector3POD& )const; 00088 const Vector3POD mul( const Vector3POD& )const; 00089 const Vector3POD div( const Vector3POD& )const; 00090 const Vector3POD neg()const; 00091 void addAssign( f32 ); 00092 void subAssign( f32 ); 00093 void mulAssign( f32 ); 00094 void divAssign( f32 ); 00095 void addAssign( const Vector3POD& ); 00096 void subAssign( const Vector3POD& ); 00097 void mulAssign( const Vector3POD& ); 00098 void divAssign( const Vector3POD& ); 00099 00100 00101 //============================================================ 00103 00104 const Vector3POD operator+( f32 )const; 00105 const Vector3POD operator-( f32 )const; 00106 const Vector3POD operator*( f32 )const; 00107 const Vector3POD operator/( f32 )const; 00108 const Vector3POD operator+( const Vector3POD& )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; 00113 Vector3POD& operator+=( f32 ); 00114 Vector3POD& operator-=( f32 ); 00115 Vector3POD& operator*=( f32 ); 00116 Vector3POD& operator/=( f32 ); 00117 Vector3POD& operator+=( const Vector3POD& ); 00118 Vector3POD& operator-=( const Vector3POD& ); 00119 Vector3POD& operator*=( const Vector3POD& ); 00120 Vector3POD& operator/=( const Vector3POD& ); 00121 00122 00123 //============================================================ 00125 00126 f32 squareLength()const; 00127 f32 length()const; 00128 f32 distance( const Vector3POD& )const; 00129 bool isZero()const; 00130 bool isZeroStrict()const; 00131 bool isUnit()const; 00132 const Vector3POD unit()const; 00133 void unitAssign(); 00134 00135 00136 //============================================================ 00138 00139 f32 dot( const Vector3POD& )const; 00140 const Vector3POD cross( const Vector3POD& )const; 00141 00142 00143 //============================================================ 00145 00146 00147 const ShortString toShortString()const; 00149 }; 00150 00152 class Vector3 : public Vector3POD 00153 { 00154 public: 00155 //============================================================ 00157 00158 Vector3(); 00159 Vector3( const Vector3POD& aXYZ ); 00160 Vector3( f32 aX , f32 aY , f32 aZ ); 00161 00162 }; 00164 } 00165 //------------------------------------------------------------ 00166 #endif 00167 // EOF