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