Main Page   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

vector.h

00001 //---------------------------------------------------------------------------
00002 
00003 #ifndef vectorH
00004 #define vectorH
00005 
00006 #include <fastmath.h>
00007 //---------------------------------------------------------------------------
00011 template <class t>
00012 class vector
00013 {
00014         private:
00015                 t _x, _y, _z;
00016 
00017 
00021                 t _length() {
00022                         return _fm_sqrt(_x*_x + _y*_y + _z*_z);
00023                 }
00024 
00025 
00026         public:
00027                 vector()
00028                 : _x(0.0),
00029                   _y(0.0),
00030                   _z(0.0)
00031                 {}
00032 
00033                 vector(t x, t y, t z)
00034                 : _x(x),
00035                   _y(y),
00036                   _z(z)
00037                 {}
00038 
00039                 vector(const vector &v)
00040                 : _x(v._x),
00041                   _y(v._y),
00042                   _z(v._z)
00043                 {}
00044 
00045                 const vector &operator=(const vector &v)
00046                 {
00047                         if (&v != this) {
00048                                 _x = v._x;
00049                                 _y = v._y;
00050                                 _z = v._z;
00051                         }
00052                         return *this;
00053                 }
00054 
00059                 const vector operator*(const t s) const
00060                 {
00061                         return vector<t>(_x*s, _y*s, _z*s);
00062                 }
00063 
00067                 const vector operator*(const vector &v) const
00068                 {
00069                         return vector<t>(_y*v._z-v._y*_z,
00070                                          _z*v._x-v._z*_x,
00071                                          _x*v._y-v._x*_y);  
00072                 }
00073 
00077                 const t operator^(const vector &v) const
00078                 {
00079                         return (_x*v._x + _y*v._y + _z*v._z);
00080                 }
00081 
00085                 const vector operator+(const vector &v) const
00086                 {
00087                         return vector<t>(_x+v._x, _y+v._y, _z+v._z);
00088                 }
00089 
00090                 const vector operator+() const
00091                 {
00092                         return *this;
00093                 }
00094 
00095                 const vector &operator+=(const vector v)
00096                 {
00097                         _x += v._x;
00098                         _y += v._y;
00099                         _z += v._z;
00100                         return *this;
00101                 }
00102 
00103                 const vector operator-(const vector &v) const
00104                 {
00105                         return vector<t>(_x-v._x, _y-v._y, _z-v._z);
00106                 }
00107 
00108                 const vector operator-() const
00109                 {
00110                         vector tmp(-_x, -_y, -_z);
00111                         return tmp;
00112                 }
00113 
00114                 const vector &operator-=(const vector v)
00115                 {
00116                         _x -= v._x;
00117                         _y -= v._y;
00118                         _z -= v._z;
00119                         return *this;
00120                 }
00121 
00122 
00126                 void rotx(t val)
00127                 {
00128                         t _yold = _y, _zold = _z;
00129                         _y =   _yold*_fm_cos(val) - _zold*_fm_sin(val);
00130                         _z =   _yold*_fm_sin(val) + _zold*_fm_cos(val);
00131                 }
00132 
00133                 void roty(t val)
00134                 {
00135                         t _xold = _x, _zold = _z;
00136                         _x =   _xold*_fm_cos(val) + _zold*_fm_sin(val);
00137                         _z = - _xold*_fm_sin(val) + _zold*_fm_cos(val);
00138                 }
00139 
00140                 void rotz(t val)
00141                 {
00142                         t _xold = _x, _yold = _y;
00143                         _x =   _xold*_fm_cos(val) - _yold*_fm_sin(val);
00144                         _y =   _xold*_fm_sin(val) + _yold*_fm_cos(val);
00145                 }
00146 
00147                 void normal(void)
00148                 {
00149                         t l = _length();
00150                         _x = _x / l;
00151                         _y = _y / l;
00152                         _z = _z / l;
00153                 }
00154 
00155 
00156                 __property t X = { read=_x, write=_x };
00157                 __property t Y = { read=_y, write=_y };
00158                 __property t Z = { read=_z, write=_z };
00159                 __property t L = { read=_length };
00160 };
00161 
00162 typedef vector<float> vectorf;
00163 typedef vector<double> vectord;
00164 
00165 #endif

Generated on Thu Jan 23 06:17:39 2003 for Vol by doxygen1.2.18