• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/util/header/v3.inl

Go to the documentation of this file.
00001 
00002 // ==================================================
00003 // METHODS
00004 // ==================================================
00005 
00006 template<typename Real>
00007 v3<Real>& v3<Real>::set(const Real x, const Real y, const Real z){
00008         v[0] = x;
00009         v[1] = y;
00010         v[2] = z;
00011         return *this;
00012 }
00013 
00014 template<typename Real>
00015 v3<Real>& v3<Real>::get(Real& x, Real& y, Real& z){
00016         x = v[0];
00017         y = v[1];
00018         z = v[2];
00019         return *this;
00020 }
00021 
00022 template<typename Real>
00023 v3<Real>& v3<Real>::zero(void){
00024         x = Real(0);
00025         y = Real(0);
00026         z = Real(0);
00027         return *this;
00028 }
00029 
00030 template<typename Real>
00031 v3<Real>& v3<Real>::identity(void){
00032         x = Real(1);
00033         y = Real(1);
00034         z = Real(1);
00035         return *this;
00036 }
00037 
00038 template<typename Real>
00039 Real v3<Real>::length(void){
00040         return sqrt(x*x + y*y + z*z);
00041 }
00042 
00043 template<typename Real>
00044 Real v3<Real>::length2(void){
00045         return x*x + y*y + z*z;
00046 }
00047 
00048 template<typename Real>
00049 v3<Real>& v3<Real>::normalize(void){
00050         const Real l = length();
00051         x /= l;
00052         y /= l;
00053         z /= l;
00054         return *this;
00055 }
00056 
00057 // ==================================================
00058 // CLASS OPERATORS
00059 // ==================================================
00060 
00061 template<typename Real>
00062 v3<Real>& v3<Real>::operator = (const v3& a){
00063         x = a.x;
00064         y = a.y;
00065         z = a.z;
00066         return *this;
00067 }
00068 
00069 template<typename Real>
00070 v3<Real>& v3<Real>::operator += (const v3& a){
00071         x += a.x;
00072         y += a.y;
00073         z += a.z;
00074         return *this;
00075 }
00076 
00077 template<typename Real>
00078 v3<Real>& v3<Real>::operator -= (const v3& a){
00079         x -= a.x;
00080         y -= a.y;
00081         z -= a.z;
00082         return *this;
00083 }
00084 
00085 template<typename Real>
00086 v3<Real>& v3<Real>::operator *= (const Real a){
00087         x *= a;
00088         y *= a;
00089         z *= a;
00090         return *this;
00091 }
00092 
00093 template<typename Real>
00094 v3<Real>& v3<Real>::operator /= (const Real a){
00095         x /= a;
00096         y /= a;
00097         z /= a;
00098         return *this;
00099 }
00100 
00101 template<typename Real>
00102 bool v3<Real>::operator == (const v3& vec){
00103         return 
00104                 (v[0] == vec[0]) &&
00105                 (v[1] == vec[1]) &&
00106                 (v[2] == vec[2]);
00107 }
00108 
00109 template<typename Real>
00110 bool v3<Real>::operator != (const v3& vec){
00111         return 
00112                 (v[0] != vec[0]) ||
00113                 (v[1] != vec[1]) ||
00114                 (v[2] != vec[2]);
00115 }
00116 
00117 template<typename Real>
00118 Real& v3<Real>::operator [] (const uchar i){
00119         assert(i<3);
00120         return v[i];
00121 }
00122 
00123 template<typename Real>
00124 const Real v3<Real>::operator [] (const uchar i) const{
00125         assert(i<3);
00126         return v[i];
00127 }
00128 
00129 template<typename Real>
00130 Real& v3<Real>::operator () (const uchar i){
00131         assert(i<3);
00132         return v[i];
00133 }
00134 
00135 template<typename Real>
00136 const Real v3<Real>::operator () (const uchar i) const{
00137         assert(i<3);
00138         return v[i];
00139 }
00140 
00141 // ==================================================
00142 // FUNCTIONS
00143 // ==================================================
00144 
00145 template<typename Real>
00146 v3<Real> Zero3(void){
00147         return v3<Real>(0.f,0.f,0.f);
00148 }
00149 
00150 template<typename Real>
00151 v3<Real> Identity3(void){
00152         return v3<Real>(1.f,1.f,1.f);
00153 }
00154 
00155 template<typename Real>
00156 v3<Real> cross(const v3<Real>& a, const v3<Real>& b){
00157         return v3<Real>(
00158                 a.y * b.z - a.z * b.y,
00159                 a.z * b.x - a.x * b.z,
00160                 a.x * b.y - a.y * b.x);
00161 }
00162 
00163 template<typename Real>
00164 Real lengthSQ(const v3<Real>& a){
00165         return a[0]*a[0] + a[1]*a[1] + a[2]*a[2];
00166 }
00167 
00168 template<typename Real>
00169 Real length(const v3<Real>& a){
00170         return sqrt(lengthSQ(a));
00171 }
00172 
00173 template<typename Real>
00174 Real length(const v3<Real>& from, const v3<Real>& to){
00175         return length(to - from);
00176 }
00177 
00178 template<typename Real>
00179 Real lengthSQ(const v3<Real>& from, const v3<Real>& to){
00180         return lengthSQ(to - from);
00181 }
00182 
00183 template<typename Real>
00184 v3<Real> proj(const v3<Real>& a, const v3<Real>& on){
00185         const Real f = (on*a) / (on*on);
00186         return v3<Real>(on[0]*f, on[1]*f, on[2]*f);
00187 }
00188 
00189 template<typename Real>
00190 v3<Real> projU(const v3<Real>& a, const v3<Real>& on){
00191         const Real f = on*a;
00192         return v3<Real>(on[0]*f, on[1]*f, on[2]*f);
00193 }
00194 
00195 template<typename Real>
00196 v3<Real> normalize(const v3<Real>& v){
00197         const Real l = invsqrt(lengthSQ(v));
00198         return v3<Real>(v[0]*l, v[1]*l, v[2]*l);
00199 }
00200 
00201 template<typename Real>
00202 Real dot(const v3<Real>& a, const v3<Real>& b){
00203         return a*b;
00204 }
00205 
00206 // ==================================================
00207 // OPERATORS
00208 // ==================================================
00209 
00210 template<typename Real>
00211 Real operator * (const v3<Real>& a, const v3<Real>& b){
00212         return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
00213 }
00214 
00215 template<typename Real>
00216 v3<Real> operator * (const Real a, const v3<Real>& b){
00217         return v3<Real>(a*b.x, a*b.y, a*b.z);
00218 }
00219 
00220 template<typename Real>
00221 v3<Real> operator * (const v3<Real>& a, const Real b){
00222         return v3<Real>(a.x*b, a.y*b, a.z*b);
00223 }
00224 
00225 template<typename Real>
00226 v3<Real> operator / (const Real a, const v3<Real>& b){
00227         return v3<Real>(b.x/a, b.y/a, b.z/a);
00228 }
00229 
00230 template<typename Real>
00231 v3<Real> operator / (const v3<Real>& a, const Real b){
00232         return v3<Real>(a.x/b, a.y/b, a.z/b);
00233 }
00234 
00235 template<typename Real>
00236 v3<Real> operator + (const v3<Real>& a, const v3<Real>& b){
00237         return v3<Real>(a.x+b.x, a.y+b.y, a.z+b.z);
00238 }
00239 
00240 template<typename Real>
00241 v3<Real> operator - (const v3<Real>& a){
00242         return v3<Real>(-a.x, -a.y, -a.z);
00243 }
00244 
00245 template<typename Real>
00246 v3<Real> operator - (const v3<Real>& a, const v3<Real>& b){
00247         return v3<Real>(a.x-b.x, a.y-b.y, a.z-b.z);
00248 }

Generated on Fri Jun 18 2010 17:48:40 for Cannonball by  doxygen 1.7.0