00001 00007 #include "Vector.h" 00008 00009 float dot(const Vec2 &u, const Vec2 &v){ 00010 return u.x * v.x + u.y * v.y; 00011 } 00012 00013 /******************************************************************** 00014 * Constructor 00015 */ 00016 Vec2::Vec2() { 00017 x = y = 0.0f; 00018 } 00019 00020 /******************************************************************** 00021 * Constructor (float xyz) 00022 */ 00023 Vec2::Vec2(const float xy) { 00024 x = y = xy; 00025 } 00026 00027 /******************************************************************** 00028 * Constructor (float x, float y, float z) 00029 */ 00030 Vec2::Vec2(const float xx, const float yy) { 00031 x = xx; 00032 y = yy; 00033 } 00034 00035 /******************************************************************** 00036 * Destructor 00037 */ 00038 Vec2::~Vec2() { 00039 00040 } 00041 00042 /******************************************************************** 00043 * Length (Magnitude) 00044 */ 00045 float Vec2::length() { 00046 return sqrtf(x*x + y*y); 00047 } 00048 00049 /******************************************************************** 00050 * Normalize 00051 */ 00052 Vec2 Vec2::normalize() { 00053 float len = length(); 00054 if (len > 0) 00055 return *this / len; 00056 return *this; 00057 } 00058 00059 /******************************************************************** 00060 * Operator + 00061 */ 00062 Vec2 Vec2::operator + (const Vec2 &v) { 00063 return Vec2(x+v.x, y+v.y); 00064 } 00065 00066 /******************************************************************** 00067 * Operator - 00068 */ 00069 Vec2 Vec2::operator - (const Vec2 &v) { 00070 return Vec2(x-v.x, y-v.y); 00071 } 00072 00073 /******************************************************************** 00074 * Operator - 00075 */ 00076 Vec2 Vec2::operator - () { 00077 return Vec2(-x, -y); 00078 } 00079 00080 /******************************************************************** 00081 * Operator * 00082 */ 00083 Vec2 Vec2::operator * (const float s) { 00084 return Vec2(x*s, y*s); 00085 } 00086 00087 /******************************************************************** 00088 * Operator * 00089 */ 00090 Vec2 Vec2::operator * (const Vec2 &v) { 00091 return Vec2(x*v.x, y*v.y); 00092 } 00093 00094 /******************************************************************** 00095 * Cross product (operator ^) 00096 */ 00105 /******************************************************************** 00106 * Operator / 00107 */ 00108 Vec2 Vec2::operator / (const float s) { 00109 return Vec2(x/s, y/s); 00110 } 00111 00112 /******************************************************************** 00113 * Operator / 00114 */ 00115 Vec2 Vec2::operator / (const Vec2 &v) { 00116 return Vec2(x/v.x, y/v.y); 00117 } 00118 00119 /******************************************************************** 00120 * Operator = 00121 */ 00122 void Vec2::operator = (const Vec2 &v) { 00123 x = v.x; 00124 y = v.y; 00125 } 00126 00127 /******************************************************************** 00128 * Operator += 00129 */ 00130 void Vec2::operator += (const Vec2 &v) { 00131 x += v.x; 00132 y += v.y; 00133 } 00134 00135 /******************************************************************** 00136 * Operator -= 00137 */ 00138 void Vec2::operator -= (const Vec2 &v) { 00139 x -= v.x; 00140 y -= v.y; 00141 } 00142 00143 /******************************************************************** 00144 * Operator *= 00145 */ 00146 void Vec2::operator *= (const float s) { 00147 x *= s; 00148 y *= s; 00149 } 00150 00151 /******************************************************************** 00152 * Operator *= 00153 */ 00154 void Vec2::operator *= (const Vec2 &v) { 00155 x *= v.x; 00156 y *= v.y; 00157 } 00158 00159 /******************************************************************** 00160 * Operator /= 00161 */ 00162 void Vec2::operator /= (const float s) { 00163 x /= s; 00164 y /= s; 00165 } 00166 00167 /******************************************************************** 00168 * Operator /= 00169 */ 00170 void Vec2::operator /= (const Vec2 &v) { 00171 x /= v.x; 00172 y /= v.y; 00173 } 00174 00175 /******************************************************************** 00176 * Operator > 00177 */ 00178 bool Vec2::operator > (Vec2 &v) { 00179 return length() > v.length(); 00180 } 00181 00182 /******************************************************************** 00183 * Operator == 00184 */ 00185 bool Vec2::operator == (const Vec2 &v) { 00186 return (x == v.x) && (y == v.y); 00187 } 00188 00189 /******************************************************************** 00190 * Operator != 00191 */ 00192 bool Vec2::operator != (const Vec2 &v) { 00193 return (x != v.x) || (y != v.y); 00194 }