00001 #ifndef __VECTOR2__H__
00002 #define __VECTOR2__H__
00003
00004 #include <math.h>
00005
00006 class Vector2
00007 {
00008 public:
00009 union
00010 {
00011 struct
00012 {
00013 float x;
00014 float y;
00015 };
00016
00017 struct
00018 {
00019 float u;
00020 float v;
00021 };
00022
00023 float comp[2];
00024 };
00025
00026 inline Vector2() {}
00027 inline Vector2(const float _x, const float _y) : x(_x), y(_y) {}
00028
00029 inline operator float* () {return (float*)(comp);}
00030
00031 inline Vector2 operator + (const Vector2& v) const {return Vector2(x + v.x, y + v.y);}
00032 inline Vector2 operator - (const Vector2& v) const {return Vector2(x - v.x, y - v.y);}
00033 inline Vector2 operator - () const {return Vector2(-x, -y);}
00034 inline Vector2 operator * (const Vector2& v) const {return Vector2(x * v.x, y * v.y);}
00035 inline Vector2 operator * (const float f) const {return Vector2(x * f, y * f);}
00036 inline Vector2 operator / (const Vector2& v) const {return Vector2(x / v.x, y / v.y);}
00037 inline Vector2 operator / (const float f) const {return Vector2(x / f, y / f);}
00038 inline friend Vector2 operator * (const float f, const Vector2& v) {return Vector2(v.x * f, v.y * f);}
00039
00040 inline Vector2 operator = (const Vector2& v) {x = v.x; y = v.y; return *this;}
00041 inline Vector2 operator += (const Vector2& v) {x += v.x; y += v.y; return *this;}
00042 inline Vector2 operator -= (const Vector2& v) {x -= v.x; y -= v.y; return *this;}
00043 inline Vector2 operator *= (const Vector2& v) {x *= v.x; y *= v.y; return *this;}
00044 inline Vector2 operator *= (const float f) {x *= f; y *= f; return *this;}
00045 inline Vector2 operator /= (const Vector2& v) {x /= v.x; y /= v.y; return *this;}
00046 inline Vector2 operator /= (const float f) {x /= f; y /= f; return *this;}
00047
00048 inline bool operator == (const Vector2& v) const {if(x != v.x) return false; return y == v.y;}
00049 inline bool operator != (const Vector2& v) const {if(x != v.x) return true; return y != v.y;}
00050
00051 static inline float Vector2Length(const Vector2& v) {return sqrtf(v.x * v.x + v.y * v.y);}
00052 static inline float Vector2LengthSq(const Vector2& v) {return v.x * v.x + v.y * v.y;}
00053 static inline Vector2 Vector2Normalize(const Vector2& v) {return v / sqrtf(v.x * v.x + v.y * v.y);}
00054 static inline Vector2 Vector2NormalizeEx(const Vector2& v) {return v / (sqrtf(v.x * v.x + v.y * v.y) + 0.0001f);}
00055
00056
00057
00058
00059
00060 };
00061
00062 #endif