Lumino.Math
|
00001 00002 #ifndef LUMINO_MATH_VECTOR2_H 00003 #define LUMINO_MATH_VECTOR2_H 00004 00005 #include <stdio.h> 00006 #include "Common.h" 00007 00008 namespace Lumino 00009 { 00010 class Vector4; 00011 class Matrix; 00012 00016 class LUMINO_EXPORT Vector2 00017 { 00018 public: 00019 00020 float X; 00021 float Y; 00022 00023 public: 00024 00025 static const Vector2 Zero; 00026 static const Vector2 UnitX; 00027 static const Vector2 UnitY; 00028 static const Vector2 One; 00029 00030 public: 00031 00035 Vector2(); 00036 00040 Vector2(float x, float y); 00041 00042 public: 00043 00047 void Set(float x, float y); 00048 00052 float GetLength() const; 00053 00057 float GetLengthSquared() const; 00058 00063 void Normalize(); 00064 00070 void TransformCoord(const Matrix& mat); 00071 00075 bool IsNaNOrInf() const; 00076 00083 void Print(const char* format = NULL, FILE* stream = NULL) const; 00084 00085 public: 00086 00092 static Vector2 Normalize(const Vector2& vec); 00093 00100 static float Dot(const Vector2& vec1, const Vector2& vec2); 00101 00108 static Vector2 Min(const Vector2& vec1, const Vector2& vec2); 00109 00116 static Vector2 Max(const Vector2& vec1, const Vector2& vec2); 00117 00124 static Vector4 Transform(const Vector2& vec, const Matrix& mat); 00125 00133 static Vector2 TransformCoord(const Vector2& vec, const Matrix& mat); 00134 00143 static Vector2 Lerp(const Vector2& start, const Vector2& end, float t); 00144 00155 static Vector2 Hermite(const Vector2& v1, const Vector2& a1, const Vector2& v2, const Vector2& a2, float t); 00156 00167 static Vector2 CatmullRom(const Vector2& vec1, const Vector2& vec2, const Vector2& vec3, const Vector2& vec4, float t); 00168 00169 public: 00170 00171 Vector2& operator += (const Vector2& v); 00172 Vector2& operator += (float v); 00173 Vector2& operator -= (const Vector2& v); 00174 Vector2& operator -= (float v); 00175 Vector2& operator *= (const Vector2& v); 00176 Vector2& operator *= (float v); 00177 Vector2& operator /= (const Vector2& v); 00178 Vector2& operator /= (float v); 00179 00180 friend Vector2 operator + (const Vector2& v1, const Vector2& v2); 00181 friend Vector2 operator + (const Vector2& v1, float v2); 00182 friend Vector2 operator + (float v1, const Vector2& v2); 00183 friend Vector2 operator - (const Vector2& v1, const Vector2& v2); 00184 friend Vector2 operator - (const Vector2& v1, float v2); 00185 friend Vector2 operator - (float v1, const Vector2& v2); 00186 friend Vector2 operator * (const Vector2& v1, const Vector2& v2); 00187 friend Vector2 operator * (const Vector2& v1, float v2); 00188 friend Vector2 operator * (float v1, const Vector2& v2); 00189 friend Vector2 operator / (const Vector2& v1, const Vector2& v2); 00190 friend Vector2 operator / (const Vector2& v1, float v2); 00191 friend Vector2 operator / (float v1, const Vector2& v2); 00192 00193 friend Vector2 operator - (const Vector2& v1); 00194 00195 bool operator == (const Vector2& v) const; 00196 bool operator != (const Vector2& v) const; 00197 00198 }; 00199 00200 } // namespace Lumino 00201 00202 #include "Vector2.inl" 00203 00204 #endif // LUMINO_MATH_VECTOR2_H