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