00001 #ifndef __J2K__Vector2_CPP__
00002 #define __J2K__Vector2_CPP__
00003
00004 #include <j2k/Fred/Games/Vector2.hpp>
00005
00006 inline JVector2::JVector2(const JVector2& obj)
00007 {
00008 v[0] = obj.v[0];
00009 v[1] = obj.v[1];
00010 }
00011
00012
00013
00014 inline JVector2::JVector2(const JVector3& obj)
00015 {
00016 v[0] = obj.v[0] / obj.v[2];
00017 v[1] = obj.v[1] / obj.v[2];
00018 }
00019
00020
00021
00022 void JVector2::printSelf()
00023 {
00024 printf("| %-+7.2f %-+7.2f|\n\n", v[0], v[1]);
00025 }
00026
00027
00028
00029 JVector2 JVector2::rotate(double rad)
00030 {
00031 double s = (double)sin(rad), c = (double)cos(rad);
00032 JVector2 ret;
00033
00034 ret.v[0] = c * v[0] - s * v[1];
00035 ret.v[1] = s * v[0] + c * v[1];
00036
00037 return ret;
00038 }
00039
00040
00041
00042 void JVector2::add(JVector2 add)
00043 {
00044 v[0] = v[0] + add.v[0];
00045 v[1] = v[1] + add.v[1];
00046 }
00047
00048
00049
00050 void JVector2::subtract(JVector2 sub)
00051 {
00052 v[0] = v[0] - sub.v[0];
00053 v[1] = v[1] - sub.v[1];
00054 }
00055
00056
00057
00058 void JVector2::multiply(double mult)
00059 {
00060 v[0] = v[0] * mult;
00061 v[1] = v[1] * mult;
00062 }
00063
00064
00065
00066 void JVector2::divide(double div)
00067 {
00068 v[0] = v[0] / div;
00069 v[1] = v[1] / div;
00070 }
00071
00072
00073
00074 double JVector2::dot(JVector2 dot)
00075 {
00076 return v[0] * dot.v[0] + v[1] * dot.v[1];
00077 }
00078
00079
00080
00081 void JVector2::negative()
00082 {
00083 v[0] = -v[0];
00084 v[1] = -v[1];
00085 }
00086
00087
00088
00089 double JVector2::length()
00090 {
00091 return (double) sqrt(v[0] * v[0] + v[1] * v[1]);
00092 }
00093
00094
00095
00096 void JVector2::unit()
00097 {
00098 double len = (double) sqrt(v[0] * v[0] + v[1] * v[1]);
00099 v[0] = v[0] / len;
00100 v[1] = v[1] / len;
00101 }
00102
00103
00104
00105 double JVector2::comp(JVector2 obj)
00106 {
00107 return (*this * obj) / !*this;
00108 }
00109
00110
00111
00112 JVector2 JVector2::proj(JVector2 obj)
00113 {
00114 JVector2 a = *this, b = obj;
00115 return ((a * b) / (!a * !a)) * a;
00116 }
00117
00118 double JVector2::operator[](int i)
00119 {
00120 assert( i >= 0 && i < 2);
00121 return v[i];
00122 }
00123
00124
00125
00126 JVector2 JVector2::operator()(double x, double y)
00127 {
00128 v[0] = x;
00129 v[1] = y;
00130 return *this;
00131 }
00132
00133
00134
00135 JVector2 JVector2::operator+(JVector2 add)
00136 {
00137 JVector2 result;
00138 result.v[0] = v[0] + add.v[0];
00139 result.v[1] = v[1] + add.v[1];
00140 return result;
00141 }
00142
00143
00144
00145 JVector2 JVector2::operator-(JVector2 add)
00146 {
00147 JVector2 result;
00148 result.v[0] = v[0] - add.v[0];
00149 result.v[1] = v[1] - add.v[1];
00150 return result;
00151 }
00152
00153
00154
00155 JVector2 JVector2::operator*(double mult)
00156 {
00157 JVector2 result;
00158 result.v[0] = v[0] * mult;
00159 result.v[1] = v[1] * mult;
00160 return result;
00161 }
00162
00163
00164
00165 JVector2 operator*(double mult, JVector2 vect)
00166 {
00167 JVector2 result;
00168 result.v[0] = vect.v[0] * mult;
00169 result.v[1] = vect.v[1] * mult;
00170 return result;
00171 }
00172
00173
00174
00175 JVector2 JVector2::operator/(double div)
00176 {
00177 JVector2 result;
00178 result.v[0] = v[0] / div;
00179 result.v[1] = v[1] / div;
00180 return result;
00181 }
00182
00183
00184
00185 JVector2 operator/(double div, JVector2 vect)
00186 {
00187 JVector2 result;
00188 result.v[0] = div / vect.v[0];
00189 result.v[1] = div / vect.v[1];
00190 return result;
00191 }
00192
00193
00194
00195 double JVector2::operator*(JVector2 dot)
00196 {
00197 double result;
00198 result = v[0] * dot.v[0] + v[1] * dot.v[1];
00199 return result;
00200 }
00201
00202
00203
00204 JVector2 JVector2::operator-()
00205 {
00206 JVector2 result;
00207 result.v[0] = -v[0];
00208 result.v[1] = -v[1];
00209 return result;
00210 }
00211
00212
00213
00214 double JVector2::operator!()
00215 {
00216 return (double) sqrt(v[0] * v[0] + v[1] * v[1]);
00217 }
00218
00219
00220
00221 JVector2 JVector2::operator~()
00222 {
00223 JVector2 result;
00224 double len = (double) sqrt(v[0] * v[0] + v[1] * v[1]);
00225 result.v[0] = v[0] / len;
00226 result.v[1] = v[1] / len;
00227 return result;
00228 }
00229
00230 #endif