CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_VECTOR4_HPP) 00007 #else 00008 #define XBASE_INCLUDED_VECTOR4_HPP 00009 00010 //------------------------------------------------------------ 00011 #include <XBase/BuiltInTypes.hpp> 00012 #include <XBase/ShortString.hpp> 00013 00014 //------------------------------------------------------------ 00015 namespace XBase { 00016 struct Vector2POD; 00017 struct Vector3POD; 00018 } 00019 00020 //------------------------------------------------------------ 00021 namespace XBase { 00023 00024 00028 struct Vector4POD 00029 { 00030 //============================================================ 00032 00033 static const Vector4POD Zero(); 00034 static const Vector4POD One(); 00035 static const Vector4POD UnitX(); 00036 static const Vector4POD UnitY(); 00037 static const Vector4POD UnitZ(); 00038 static const Vector4POD UnitW(); 00039 static const Vector4POD NegUnitX(); 00040 static const Vector4POD NegUnitY(); 00041 static const Vector4POD NegUnitZ(); 00042 static const Vector4POD NegUnitW(); 00043 00044 //============================================================ 00046 00047 f32 x; 00048 f32 y; 00049 f32 z; 00050 f32 w; 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 Vector2POD toWW()const; 00061 const Vector3POD toXYZ()const; 00062 const Vector3POD toXXX()const; 00063 const Vector3POD toYYY()const; 00064 const Vector3POD toZZZ()const; 00065 const Vector3POD toWWW()const; 00066 const Vector4POD toXYZO()const; 00067 const Vector4POD toXYOW()const; 00068 const Vector4POD toXYOO()const; 00069 const Vector4POD toXOZW()const; 00070 const Vector4POD toXOZO()const; 00071 const Vector4POD toXOOW()const; 00072 const Vector4POD toXOOO()const; 00073 const Vector4POD toOYZO()const; 00074 const Vector4POD toOYOW()const; 00075 const Vector4POD toOYOO()const; 00076 const Vector4POD toOOZW()const; 00077 const Vector4POD toOOZO()const; 00078 const Vector4POD toOOOW()const; 00079 const Vector4POD toXXXX()const; 00080 const Vector4POD toYYYY()const; 00081 const Vector4POD toZZZZ()const; 00082 const Vector4POD toWWWW()const; 00084 00085 //============================================================ 00087 00088 bool equals( const Vector4POD& )const; 00089 bool equalsStrict( const Vector4POD& )const; 00090 00091 00092 //============================================================ 00094 00095 const Vector4POD add( f32 )const; 00096 const Vector4POD sub( f32 )const; 00097 const Vector4POD mul( f32 )const; 00098 const Vector4POD div( f32 )const; 00099 const Vector4POD add( const Vector4POD& )const; 00100 const Vector4POD sub( const Vector4POD& )const; 00101 const Vector4POD mul( const Vector4POD& )const; 00102 const Vector4POD div( const Vector4POD& )const; 00103 const Vector4POD neg()const; 00104 void addAssign( f32 ); 00105 void subAssign( f32 ); 00106 void mulAssign( f32 ); 00107 void divAssign( f32 ); 00108 void addAssign( const Vector4POD& ); 00109 void subAssign( const Vector4POD& ); 00110 void mulAssign( const Vector4POD& ); 00111 void divAssign( const Vector4POD& ); 00112 00113 00114 //============================================================ 00116 00117 const Vector4POD operator+( f32 )const; 00118 const Vector4POD operator-( f32 )const; 00119 const Vector4POD operator*( f32 )const; 00120 const Vector4POD operator/( f32 )const; 00121 const Vector4POD operator+( const Vector4POD& )const; 00122 const Vector4POD operator-( const Vector4POD& )const; 00123 const Vector4POD operator*( const Vector4POD& )const; 00124 const Vector4POD operator/( const Vector4POD& )const; 00125 const Vector4POD operator-()const; 00126 Vector4POD& operator+=( f32 ); 00127 Vector4POD& operator-=( f32 ); 00128 Vector4POD& operator*=( f32 ); 00129 Vector4POD& operator/=( f32 ); 00130 Vector4POD& operator+=( const Vector4POD& ); 00131 Vector4POD& operator-=( const Vector4POD& ); 00132 Vector4POD& operator*=( const Vector4POD& ); 00133 Vector4POD& operator/=( const Vector4POD& ); 00134 00135 00136 //============================================================ 00138 00139 f32 squareLength()const; 00140 f32 length()const; 00141 f32 distance( const Vector4POD& )const; 00142 bool isZero()const; 00143 bool isZeroStrict()const; 00144 bool isUnit()const; 00145 const Vector4POD unit()const; 00146 void unitAssign(); 00147 00148 00149 //============================================================ 00151 00152 f32 dot( const Vector4POD& )const; 00153 00154 00155 //============================================================ 00157 00158 00159 const ShortString toShortString()const; 00161 }; 00162 00164 class Vector4 : public Vector4POD 00165 { 00166 public: 00167 //============================================================ 00169 00170 Vector4(); 00171 Vector4( const Vector4POD& aXYZW ); 00172 Vector4( f32 aX , f32 aY , f32 aZ , f32 aW ); 00173 00174 }; 00176 } 00177 //------------------------------------------------------------ 00178 #endif 00179 // EOF