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