Lumino.Math
D:/Proj/Lumino.Math/include/Lumino/Math/Vector4.h
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
 All Classes Functions Variables Friends