00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __VECTOR2_H_
00019 #define __VECTOR2_H_
00020
00021
00022 #include "Utilities.h"
00023
00025 template <typename Type> class Vector2
00026 {
00027 public:
00028
00029
00030 Vector2()
00031 {
00032 x = (Type)0;
00033 y = (Type)0;
00034 }
00035
00036
00037 Vector2(Type x, Type y)
00038 {
00039 this->x = x;
00040 this->y = y;
00041 }
00042
00043
00044 Vector2(const Vector2 &obj)
00045 {
00046 x = obj.x;
00047 y = obj.y;
00048 }
00049
00050
00051 ~Vector2()
00052 {
00053
00054 }
00055
00056
00057 Vector2 operator= (const Vector2 &obj)
00058 {
00059 x = obj.x;
00060 y = obj.y;
00061 return *this;
00062 }
00063
00064
00065 Vector2 operator+ (const Vector2 &obj)
00066 {
00067 return Vector2<Type>(x + obj.x, y + obj.y);
00068 }
00069
00070
00071 Vector2 operator- (const Vector2 &obj)
00072 {
00073 return Vector2<Type>(x - obj.x, y - obj.y);
00074 }
00075
00076
00077 Vector2 operator* (const Vector2 &obj)
00078 {
00079 return Vector2<Type>(x * obj.x, y * obj.y);
00080 }
00081
00082
00083 Vector2 operator/ (const Vector2 &obj)
00084 {
00085 return Vector2<Type>(x / obj.x, y / obj.y);
00086 }
00087
00088
00089 Vector2& operator+= (const Vector2 &obj)
00090 {
00091 *this = *this + obj;
00092 return *this;
00093 }
00094
00095
00096 Vector2& operator-= (const Vector2 &obj)
00097 {
00098 *this = *this - obj;
00099 return *this;
00100 }
00101
00102
00103 Vector2& operator*= (const Vector2 &obj)
00104 {
00105 *this = *this * obj;
00106 return *this;
00107 }
00108
00109
00110 Vector2& operator/= (const Vector2 &obj)
00111 {
00112 *this = *this / obj;
00113 return *this;
00114 }
00115
00116
00117 bool operator== (const Vector2 &obj)
00118 {
00119 if(obj.x == x && obj.y == y)
00120 return true;
00121 else
00122 return false;
00123 }
00124
00125
00126 double GetLength()
00127 {
00128 double X = (double)x;
00129 double Y = (double)y;
00130 return sqrt(X*X + Y*Y);
00131 }
00132
00133
00134 Type x, y;
00135
00136 };
00137
00139 template <typename Type> Vector2<Type> V2Min(const Vector2<Type> obj1, const Vector2<Type> obj2)
00140 {
00141 return Vector2<Type>(min(obj1.x, obj2.x), min(obj1.y, obj2.y));
00142 }
00143
00145 template <typename Type> Vector2<Type> V2Max(const Vector2<Type> obj1, const Vector2<Type> obj2)
00146 {
00147 return Vector2<Type>(max(obj1.x, obj2.x), max(obj1.y, obj2.y));
00148 }
00149
00150 #endif