Lumino.Math
|
00001 00002 #ifndef LUMINO_MATH_VECTOR4_H 00003 #define LUMINO_MATH_VECTOR4_H 00004 00005 #include <stdio.h> 00006 #include "Common.h" 00007 00008 namespace Lumino 00009 { 00010 class Vector2; 00011 class Vector3; 00012 class Matrix; 00013 00017 class LUMINO_EXPORT Vector4 00018 { 00019 public: 00020 00021 float X; 00022 float Y; 00023 float Z; 00024 float W; 00025 00026 public: 00027 00031 Vector4(); 00032 00036 Vector4(float x, float y, float z, float w); 00037 00041 Vector4(const Vector2& vec, float z, float w); 00042 00046 Vector4(const Vector3& vec, float w); 00047 00048 public: 00049 00053 void Set(float x, float y, float z, float w); 00054 00058 const Vector2& GetXY() const; 00059 00063 const Vector3& GetXYZ() const; 00064 00068 float GetLength() const; 00069 00073 float GetLengthSquared() const; 00074 00078 void Clamp(float min_xyzw, float max_xyzw); 00079 00085 void Clamp(const Vector4& minVec, const Vector4& maxVec); 00086 00090 bool IsNaNOrInf() const; 00091 00098 void Print(const char* format = NULL, FILE* stream = NULL) const; 00099 00100 public: 00101 00107 static Vector4 Normalize(const Vector4& vec); 00108 00115 static float Dot(const Vector4& vec1, const Vector4& vec2); 00116 00123 static Vector4 Min(const Vector4& vec1, const Vector4& vec2); 00124 00131 static Vector4 Max(const Vector4& vec1, const Vector4& vec2); 00132 00139 static Vector4 Transform(const Vector4& vec, const Matrix& mat); 00140 00149 static Vector4 Lerp(const Vector4& start, const Vector4& end, float t); 00150 00161 static Vector4 Hermite(const Vector4& v1, const Vector4& a1, const Vector4& v2, const Vector4& a2, float t); 00162 00173 static Vector4 CatmullRom(const Vector4& vec1, const Vector4& vec2, const Vector4& vec3, const Vector4& vec4, float t); 00174 00175 public: 00176 00177 Vector4& operator += (const Vector4& v); 00178 Vector4& operator += (float v); 00179 Vector4& operator -= (const Vector4& v); 00180 Vector4& operator -= (float v); 00181 Vector4& operator *= (const Vector4& v); 00182 Vector4& operator *= (float v); 00183 Vector4& operator /= (const Vector4& v); 00184 Vector4& operator /= (float v); 00185 00186 friend Vector4 operator + (const Vector4& v1, const Vector4& v2); 00187 friend Vector4 operator + (const Vector4& v1, float v2); 00188 friend Vector4 operator + (float v1, const Vector4& v2); 00189 friend Vector4 operator - (const Vector4& v1, const Vector4& v2); 00190 friend Vector4 operator - (const Vector4& v1, float v2); 00191 friend Vector4 operator - (float v1, const Vector4& v2); 00192 friend Vector4 operator * (const Vector4& v1, const Vector4& v2); 00193 friend Vector4 operator * (const Vector4& v1, float v2); 00194 friend Vector4 operator * (float v1, const Vector4& v2); 00195 friend Vector4 operator / (const Vector4& v1, const Vector4& v2); 00196 friend Vector4 operator / (const Vector4& v1, float v2); 00197 friend Vector4 operator / (float v1, const Vector4& v2); 00198 00199 friend Vector4 operator - (const Vector4& v1); 00200 00201 bool operator == (const Vector4& v) const; 00202 bool operator != (const Vector4& v) const; 00203 }; 00204 00205 } // namespace Lumino 00206 00207 #include "Vector4.inl" 00208 00209 #endif // LUMINO_MATH_VECTOR4_H