Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

vector3.h

Go to the documentation of this file.
00001 
00002 // Filename: vector3.h
00003 // Description: 3D vector class
00005 
00006 #ifndef __vector3_h
00007 #define __vector3_h
00008 #define REAL_TYPE double
00009 
00010 #include <math.h>
00011 
00012 class vector3 {
00013 private:
00014    REAL_TYPE m[3];
00015    
00016 public:
00017    vector3(REAL_TYPE a=0,REAL_TYPE b=0,REAL_TYPE c=0) {m[0]=a;m[1]=b;m[2]=c;}
00018 
00019    void set(REAL_TYPE a=0,REAL_TYPE b=0,REAL_TYPE c=0) {m[0]=a;m[1]=b;m[2]=c;}
00020 
00021    REAL_TYPE x() {return m[0];}
00022    REAL_TYPE y() {return m[1];}
00023    REAL_TYPE z() {return m[2];}
00024    
00025 // [] operator to get elements
00026    REAL_TYPE  &operator [](int i) {return m[i];}  
00027    const REAL_TYPE &operator [](int i) const {return m[i];}
00028    
00029 //cast to REAL_TYPE pointer
00030    operator const REAL_TYPE* const() const {return &m[0];}
00031    
00032    bool     operator ==(const vector3 &p) const {return ((m[0]==p.m[0])&&(m[1]==p.m[1])&&(m[2]==p.m[2]));}
00033    bool     operator !=(const vector3 &p) const {return !((*this)==p);}
00034    
00035    vector3  &operator+=(const vector3 &p) {m[0]+=p.m[0];m[1]+=p.m[1];m[2]+=p.m[2];return *this;}
00036    vector3  operator + (const vector3 &p) const {return vector3(m[0]+p.m[0],m[1]+p.m[1],m[2]+p.m[2]);}
00037    
00038    vector3  &operator-=(const vector3 &p) {m[0]-=p.m[0];m[1]-=p.m[1];m[2]-=p.m[2];return *this;}
00039    vector3  operator - (const vector3 &p) const {return vector3(m[0]-p.m[0],m[1]-p.m[1],m[2]-p.m[2]);}
00040    vector3  operator - () const {return vector3(-m[0],-m[1],-m[2]);}
00041    
00042    vector3  &operator*=(REAL_TYPE f) {m[0]*=f;m[1]*=f;m[2]*=f;return *this;} 
00043    vector3  operator * (REAL_TYPE f) const {return vector3(m[0]*f,m[1]*f,m[2]*f);}
00044    
00045    vector3  &operator/=(REAL_TYPE f) {m[0]/=f;m[1]/=f;m[2]/=f;return *this;}
00046    vector3  operator / (REAL_TYPE f) const {return vector3(m[0]/f,m[1]/f,m[2]/f);}
00047 
00048    vector3 &operator= (const vector3 &V) {if (this == &V) return *this; 
00049            m[0] = V.m[0]; m[1] = V.m[1]; m[2] = V.m[2]; return *this;}
00050    
00051 //scalar product
00052    REAL_TYPE  operator * (const vector3 &v2) const {return m[0]*v2.m[0]+m[1]*v2.m[1]+m[2]*v2.m[2];}
00053    
00054 //vector product
00055    vector3  operator ^ (const vector3 &v2) const {
00056       vector3 tmp;
00057       tmp.m[0]=m[1]*v2.m[2]-m[2]*v2.m[1];
00058       tmp.m[1]=m[2]*v2.m[0]-m[0]*v2.m[2];
00059       tmp.m[2]=m[0]*v2.m[1]-m[1]*v2.m[0];
00060       return tmp;
00061    }
00062    
00063 //abs by definition
00064    REAL_TYPE  abs() const {return sqrt((*this)*(*this));}
00065    
00066 //normalize to length one
00067    vector3  &normalize() {return (*this)/=abs();}
00068    
00069 //For printout, input = string to write in, returns string "x,y,z"
00070    char*    str(char* s) const {sprintf(s,"%4.1f,%4.1f,%4.1f",m[0],m[1],m[2]);return s;} 
00071 };
00072 
00073 //abs by definition
00074 inline REAL_TYPE  Angle(vector3 &a, vector3 &b)
00075 {
00076 REAL_TYPE r = (a*b)/(a.abs()*b.abs());
00077 if ( r >= 1.0 ) { return 0.0; }
00078 else if ( r <= -1.0 ) { return 3.14159265; }
00079 else { return acos(r); }
00080 }
00081 
00082 
00083 #endif //__vector3_h
00084 
00086 //                               END OF FILE                               //

Generated on Sun Jun 16 17:36:42 2002 for Anirudh's Vortex-Wake Simulation Code by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001