Lumino.Math
D:/Proj/Lumino.Math/include/Lumino/Math/Vector3.h
00001 
00002 #ifndef LUMINO_MATH_VECTOR3_H
00003 #define LUMINO_MATH_VECTOR3_H
00004 
00005 #include <stdio.h>
00006 #include "Common.h"
00007 
00008 namespace Lumino
00009 {
00010 class Vector2;
00011 class Vector4;
00012 class Quaternion;
00013 class Matrix;
00014 
00018 class LUMINO_EXPORT Vector3
00019 {
00020 public:
00021 
00022     float   X;      
00023     float   Y;      
00024     float   Z;      
00025 
00026 public:
00027 
00028     static const Vector3   Zero;        
00029     static const Vector3   UnitX;       
00030     static const Vector3   UnitY;       
00031     static const Vector3   UnitZ;       
00032     static const Vector3   One;         
00033 
00034 public:
00035 
00039     Vector3();
00040 
00044     Vector3(float x, float y, float z);
00045     
00049     Vector3(const Vector2& vec, float z);
00050 
00051 public:
00052     
00056     void Set(float x, float y, float z);
00057     
00061     const Vector2& GetXY() const;
00062 
00066     float GetLength() const;
00067 
00071     float GetLengthSquared() const;
00072 
00077     void Normalize();
00078 
00084     void Clamp(const Vector3& minVec, const Vector3& maxVec);
00085 
00091     void TransformCoord(const Matrix& mat);
00092     
00096     bool IsNaNOrInf() const;
00097 
00104     void Print(const char* format = NULL, FILE* stream = NULL) const;
00105     
00106 public:
00107 
00115     static Vector3 Normalize(float x, float y, float z);
00116 
00122     static Vector3 Normalize(const Vector3& vec);
00123 
00130     static float Dot(const Vector3& vec1, const Vector3& vec2);
00131 
00138     static Vector3 Cross(const Vector3& vec1, const Vector3& vec2);
00139 
00146     static Vector3 Min(const Vector3& vec1, const Vector3& vec2);
00147 
00154     static Vector3 Max(const Vector3& vec1, const Vector3& vec2);
00155 
00162     static Vector3 Reflect(const Vector3& vec, const Vector3& normal);
00163 
00170     static Vector3 Slide(const Vector3& vec, const Vector3& normal);
00171 
00178     static Vector3 Transform(const Vector3& vec, const Quaternion& qua);
00179 
00186     static Vector4 Transform(const Vector3& vec, const Matrix& mat);
00187 
00195     static Vector3 TransformCoord(const Vector3& vec, const Matrix& mat);
00196 
00205     static Vector3 Lerp(const Vector3& start, const Vector3& end, float t);
00206 
00217     static Vector3 Hermite(const Vector3& v1, const Vector3& a1, const Vector3& v2, const Vector3& a2, float t);
00218 
00229     static Vector3 CatmullRom(const Vector3& vec1, const Vector3& vec2, const Vector3& vec3, const Vector3& vec4, float t);
00230     
00242     static Vector3 Project(const Vector3& point, const Matrix& worldViewProj, float x, float y, float width, float height, float minZ = 0.0f, float maxZ = 1.0f);
00243 
00255     static Vector3 Unproject(const Vector3& point, const Matrix& worldViewProj, float x, float y, float width, float height, float minZ = 0.0f, float maxZ = 1.0f);
00256 
00257 public:
00258 
00259     Vector3& operator += (const Vector3& v);
00260     Vector3& operator += (float v);
00261     Vector3& operator -= (const Vector3& v);
00262     Vector3& operator -= (float v);
00263     Vector3& operator *= (const Vector3& v);
00264     Vector3& operator *= (float v);
00265     Vector3& operator /= (const Vector3& v);
00266     Vector3& operator /= (float v);
00267 
00268     friend Vector3 operator + (const Vector3& v1,   const Vector3& v2);
00269     friend Vector3 operator + (const Vector3& v1,   float v2);
00270     friend Vector3 operator + (float v1,            const Vector3& v2);
00271     friend Vector3 operator - (const Vector3& v1,   const Vector3& v2);
00272     friend Vector3 operator - (const Vector3& v1,   float v2);
00273     friend Vector3 operator - (float v1,            const Vector3& v2);
00274     friend Vector3 operator * (const Vector3& v1,   const Vector3& v2);
00275     friend Vector3 operator * (const Vector3& v1,   float v2);
00276     friend Vector3 operator * (float v1,            const Vector3& v2);
00277     friend Vector3 operator / (const Vector3& v1,   const Vector3& v2);
00278     friend Vector3 operator / (const Vector3& v1,   float v2);
00279     friend Vector3 operator / (float v1,            const Vector3& v2);
00280 
00281     friend Vector3 operator - (const Vector3& v1);
00282 
00283     bool operator == (const Vector3& v) const;
00284     bool operator != (const Vector3& v) const;
00285 
00286 #ifdef LN_MATH_VECTOR3_EXTENSION
00287     LN_MATH_VECTOR3_EXTENSION
00288 #endif
00289 };
00290 
00291 } // namespace Lumino
00292 
00293 #include "Vector3.inl"
00294 
00295 #endif // LUMINO_MATH_VECTOR3_H
 All Classes Functions Variables Friends