00001
00007 #ifndef _VECTOR_H_
00008 #define _VECTOR_H_
00009
00010 #include "Math.h"
00011
00012
00013
00014
00015 class Vec2 {
00016 public:
00017 Vec2();
00018 Vec2(const float xy);
00019 Vec2(const float xx, const float yy);
00020 virtual ~Vec2();
00021
00022 float length();
00023 Vec2 normalize();
00024 Vec2 operator + (const Vec2 &v);
00025 Vec2 operator - (const Vec2 &v);
00026 Vec2 operator - ();
00027 Vec2 operator * (const float s);
00028 Vec2 operator * (const Vec2 &v);
00029
00030 Vec2 operator / (const float s);
00031 Vec2 operator / (const Vec2 &v);
00032 void operator = (const Vec2 &v);
00033 void operator += (const Vec2 &v);
00034 void operator -= (const Vec2 &v);
00035 void operator *= (const float s);
00036 void operator *= (const Vec2 &v);
00037 void operator /= (const float s);
00038 void operator /= (const Vec2 &v);
00039 bool operator > (Vec2 &v);
00040 bool operator == (const Vec2 &v);
00041 bool operator != (const Vec2 &v);
00042 float &operator [] (const int index) { return *(&x + index); }
00043 operator const float *() const { return &x; }
00044
00045 public:
00046 float x, y;
00047 };
00048
00049
00050
00051
00052 class Vec3 {
00053 public:
00054 Vec3();
00055 Vec3(const float xyz);
00056 Vec3(const float xx, const float yy, const float zz);
00057 virtual ~Vec3();
00058
00059 float length();
00060 Vec3 normalize();
00061 Vec3 operator + (const Vec3 &v);
00062 Vec3 operator - (const Vec3 &v);
00063 Vec3 operator - ();
00064 Vec3 operator * (const float s);
00065 Vec3 operator * (const Vec3 &v);
00066 Vec3 operator ^ (const Vec3 &v);
00067 Vec3 operator / (const float s);
00068 Vec3 operator / (const Vec3 &v);
00069 void operator = (const Vec3 &v);
00070 void operator += (const Vec3 &v);
00071 void operator -= (const Vec3 &v);
00072 void operator *= (const float s);
00073 void operator *= (const Vec3 &v);
00074 void operator /= (const float s);
00075 void operator /= (const Vec3 &v);
00076 bool operator > (Vec3 &v);
00077 bool operator == (const Vec3 &v);
00078 bool operator != (const Vec3 &v);
00079 float &operator [] (const int index) { return *(&x + index); }
00080 operator const float *() const { return &x; }
00081
00082 public:
00083 float x, y, z;
00084 };
00085
00086
00087
00088
00089 class Vec4 {
00090 public:
00091 Vec4();
00092 Vec4(const float xyzw);
00093 Vec4(const float xx, const float yy, const float zz, const float ww);
00094
00095 Vec4(const Vec2 v, const float zz = 0.0f, const float ww = 0.0f);
00096 Vec4(const float xx, const Vec2 v, const float ww);
00097 Vec4(const float xx, const float yy, const Vec2 v);
00098 Vec4(const Vec2 v, const Vec2 u);
00099
00100 Vec4(const Vec3 v, const float ww = 0.0f);
00101 Vec4(const float xx, const Vec3 v);
00102
00103 virtual ~Vec4();
00104
00105 float length();
00106 Vec4 normalize();
00107 Vec4 operator + (const Vec4 &v);
00108 Vec4 operator - (const Vec4 &v);
00109 Vec4 operator - ();
00110 Vec4 operator * (const float s);
00111 Vec4 operator * (const Vec4 &v);
00112
00113 Vec4 operator / (const float s);
00114 Vec4 operator / (const Vec4 &v);
00115 void operator = (const Vec4 &v);
00116 void operator += (const Vec4 &v);
00117 void operator -= (const Vec4 &v);
00118 void operator *= (const float s);
00119 void operator *= (const Vec4 &v);
00120 void operator /= (const float s);
00121 void operator /= (const Vec4 &v);
00122 bool operator > (Vec4 &v);
00123 bool operator == (const Vec4 &v);
00124 bool operator != (const Vec4 &v);
00125 float &operator [] (const int index) { return *(&x + index); }
00126 operator const float *() const { return &x; }
00127
00128 public:
00129 float x, y, z, w;
00130 };
00131
00132 float dot(const Vec2 &u, const Vec2 &v);
00133 float dot(const Vec3 &u, const Vec3 &v);
00134 float dot(const Vec4 &u, const Vec4 &v);
00135
00136 #endif