vec2.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002  *  vec2.h
00003  *
00004  *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
00005  *           Universitaet Koblenz-Landau
00006  *
00007  * Author: Frank Neuhaus, Susanne Maur
00008  *******************************************************************************/
00009 
00010 #include <iostream>
00011 #include <sstream>
00012 
00013 #ifndef VEC2_H
00014 #define VEC2_H
00015 
00016 #include <math.h>
00017 
00018 class CVec2
00019 {
00020   public:
00021 
00022     inline CVec2()
00023     {
00024       m_X = 0; m_Y = 0;
00025     }
00026 
00027     inline CVec2 ( double x, double y )
00028     {
00029       m_X=x; m_Y=y;
00030     }
00031 
00032     inline CVec2 ( const CVec2& vec )
00033     {
00034       m_X=vec.x(); m_Y=vec.y();
00035     }
00036 
00037     inline CVec2 operator+ ( const CVec2& vVector ) const
00038     {
00039       return CVec2 ( vVector[0] + m_X, vVector[1] + m_Y );
00040     };
00041 
00042     inline CVec2 operator- ( const CVec2& vVector ) const
00043     {
00044       return CVec2 ( m_X - vVector[0], m_Y - vVector[1] );
00045     };
00046     
00047     inline CVec2 operator- ( ) const
00048     {
00049         return CVec2 ( - m_X, - m_Y );
00050     };
00051 
00052     inline CVec2 operator* ( double num ) const
00053     {
00054       return CVec2 ( m_X * num, m_Y * num );
00055     };
00056 
00057     inline double operator* ( const CVec2& vVector ) const
00058     {
00059       return m_X*vVector[0]+m_Y*vVector[1];
00060     }
00061 
00062     inline CVec2 operator/ ( double num ) const
00063     {
00064       return CVec2 ( m_X / num, m_Y / num );
00065     }
00066 
00067     inline void set ( double fx, double fy )
00068     {
00069       m_X=fx; m_Y=fy;
00070     }
00071 
00072     inline double x() const
00073     {
00074       return m_X;
00075     }
00076 
00077     inline double y() const
00078     {
00079       return m_Y;
00080     }
00081 
00082     inline double magnitude() const
00083     {
00084       double sumOfSquares = m_X*m_X + m_Y*m_Y;
00085       return sqrt ( sumOfSquares );
00086     }
00087 
00088     inline double operator [] ( unsigned int i ) const
00089     {
00090       return ( ( double* ) this ) [i];
00091     }
00092 
00093     inline double& operator [] ( unsigned int i )
00094     {
00095       return ( ( double* ) this ) [i];
00096     }
00097 
00098     inline CVec2& operator/= ( double num )
00099     {
00100       double inv=1.0f/num;
00101       m_X*=inv;
00102       m_Y*=inv;
00103       return ( *this );
00104     }
00105 
00106     inline CVec2& operator*= ( double num )
00107     {
00108       m_X*=num;
00109       m_Y*=num;
00110       return ( *this );
00111     }
00112 
00113     inline CVec2& normalize()
00114     {
00115       return ( *this/=magnitude() );
00116     }
00117 
00118     inline CVec2& makePerp()
00119     {
00120       double xn=m_X;
00121       m_X=-m_Y;
00122       m_Y=xn;
00123       return *this;
00124     }
00125 
00126     inline CVec2 getNormal() const
00127     {
00128       return CVec2 ( m_Y, -m_X ); //?
00129     }
00130 
00131     inline CVec2 getNormalized() const
00132     {
00133       return ( *this ) /magnitude();
00134     }
00135 
00136     inline double sqr() const
00137     {
00138       return ( *this ) * ( *this );
00139     }
00140 
00141     inline double dot ( const CVec2& vec ) const
00142     {
00143       return ( m_X*vec[0] ) + ( m_Y*vec[1] );
00144     }
00145 
00146     inline double getAngle ( const CVec2& vec ) const
00147     {
00148       return acos ( dot ( vec ) / ( magnitude() *vec.magnitude() ) );
00149     }
00150 
00152     inline CVec2 rotate ( float angle ) const
00153     {
00154       double xRot =  m_X*cos ( angle ) - m_Y*sin ( angle );
00155       double yRot =  m_X*sin ( angle ) + m_Y*cos ( angle );
00156       return CVec2 ( xRot, yRot );
00157     }
00158 
00159     inline bool equal ( CVec2 vec ) const
00160     {
00161       return ( m_X==vec.x() && m_Y==vec.y() );
00162     }
00163 
00168     inline std::string toString() const
00169     {
00170       std::ostringstream str;
00171       str << m_X << " " << m_Y;
00172       return str.str();
00173     }
00174 
00175   protected:
00176     double m_X, m_Y;
00177 };
00178 
00179 inline CVec2 operator* ( double f, const CVec2& v )
00180 {
00181   return v*f;
00182 }
00183 
00184 inline CVec2 normalize ( const CVec2& v )
00185 {
00186   return v/v.magnitude();
00187 }
00188 
00189 #endif


robbie_architecture
Author(s): Viktor Seib
autogenerated on Mon Oct 6 2014 02:53:09