Eigene Dateien/FlowVis/src/VVector.h

Go to the documentation of this file.
00001 #pragma once
00002 
00003 
00004 #include <math.h>
00005 #include "VCommon.h"
00006 
00007 // 3-Vector class
00008 class VVector
00009 {
00010 public:
00011         VVector()
00012         {
00013                 m_vfElements[0] = 0.0f;
00014                 m_vfElements[1] = 0.0f;
00015                 m_vfElements[2] = 0.0f;
00016         };
00017 
00018         VVector(const float fX, const float fY, const float fZ)
00019         {
00020                 m_vfElements[0] = fX;
00021                 m_vfElements[1] = fY;
00022                 m_vfElements[2] = fZ;
00023         };
00024 
00025         VVector::VVector(const float vfValues[])
00026         {
00027                 m_vfElements[0] = vfValues[0];
00028                 m_vfElements[1] = vfValues[1];
00029                 m_vfElements[2] = vfValues[2];
00030         };
00031 
00032         ~VVector()
00033         {
00034         };
00035 
00036         void set(const float fX, const float fY, const float fZ)
00037         {
00038                 m_vfElements[0] = fX;
00039                 m_vfElements[1] = fY;
00040                 m_vfElements[2] = fZ;
00041         };
00042 
00043         void setX(const float fX)
00044         {
00045                 m_vfElements[0] = fX;
00046         };
00047 
00048         void setY(const float fY)
00049         {
00050                 m_vfElements[1] = fY;
00051         };
00052 
00053         void setZ(const float fZ)
00054         {
00055                 m_vfElements[2] = fZ;
00056         };
00057 
00058         float * getPtr()
00059         {
00060                 return m_vfElements;
00061         };
00062 
00063         const float get(const unsigned int uIndex) const
00064         {
00065                 return m_vfElements[uIndex];
00066         };
00067 
00068         const float getX() const
00069         {
00070                 return m_vfElements[0];
00071         };
00072 
00073         const float getY() const
00074         {
00075                 return m_vfElements[1];
00076         };
00077 
00078         const float getZ() const
00079         {
00080                 return m_vfElements[2];
00081         };
00082 
00083         const float getMagnitude() const
00084         {
00085                 return sqrtf(getX()*getX() + getY()*getY() + getZ()*getZ());
00086         };
00087 
00088         const float getSquaredMagnitude() const
00089         {
00090                 return (getX()*getX() + getY()*getY() + getZ()*getZ());
00091         };
00092 
00093         const float getDot(const VVector &vecOther) const
00094         {
00095                 return (getX() * vecOther.getX() + getY()*vecOther.getY() + getZ()*vecOther.getZ());
00096         };
00097 
00098         const VVector getCross(const VVector &vecOther) const
00099         {
00100                 return VVector(getY()*vecOther.getZ() - getZ()*vecOther.getY(), getZ()*vecOther.getX() - getX() * vecOther.getZ(), getX()*vecOther.getY() - getY()*vecOther.getX()); 
00101         };
00102 
00103         const VVector getNormalized() const
00104         {
00105                 VVector vecNew = *this;
00106                 float fMagnitude = vecNew.getMagnitude();
00107 
00108                 if (fMagnitude > 0.0f)
00109                         vecNew /= fMagnitude;
00110 
00111                 return vecNew;
00112         };
00113 
00114         const VVector getInverse() const
00115         {
00116                 return VVector(1.0f/getX(),1.0f/getY(),1.0f/getZ());
00117         };
00118 
00119         void normalize()
00120         {
00121                 (*this) = getNormalized();
00122         };
00123 
00124         void invert()
00125         {
00126                 (*this) = getInverse();
00127         };
00128 
00129         const bool operator==(const VVector & vecOther) const
00130         {
00131                 return (getX() == vecOther.getX()) && (getY() == vecOther.getY()) && (getZ() == vecOther.getZ());
00132         };
00133 
00134         const bool operator!=(const VVector & vecOther) const
00135         {
00136                 return !(*this == vecOther);
00137         };
00138 
00139         float & operator[](const unsigned int uIndex)
00140         {
00141                 return m_vfElements[uIndex];
00142         };
00143 
00144         const float operator[](const unsigned int uIndex) const
00145         {
00146                 return m_vfElements[uIndex];
00147         };
00148 
00149         const VVector & operator+=(const VVector & vecOther)
00150         {
00151                 setX(getX()+vecOther.getX());
00152                 setY(getY()+vecOther.getY());
00153                 setZ(getZ()+vecOther.getZ());
00154                 return *this;
00155         };
00156 
00157         const VVector & operator-=(const VVector & vecOther)
00158         {
00159                 setX(getX()-vecOther.getX());
00160                 setY(getY()-vecOther.getY());
00161                 setZ(getZ()-vecOther.getZ());
00162                 return *this;
00163         };
00164 
00165         const VVector & operator*=(const VVector & vecOther)
00166         {
00167                 setX(getX()*vecOther.getX());
00168                 setY(getY()*vecOther.getY());
00169                 setZ(getZ()*vecOther.getZ());
00170                 return *this;
00171         };
00172 
00173         const VVector & operator*=(const float & fOther)
00174         {
00175                 setX(getX()*fOther);
00176                 setY(getY()*fOther);
00177                 setZ(getZ()*fOther);
00178                 return *this;
00179         };
00180 
00181         const VVector & operator/=(const VVector & vecOther)
00182         {
00183                 setX(getX()/vecOther.getX());
00184                 setY(getY()/vecOther.getY());
00185                 setZ(getZ()/vecOther.getZ());
00186                 return *this;
00187         };
00188 
00189         const VVector & operator/=(const float & fOther)
00190         {
00191                 setX(getX()/fOther);
00192                 setY(getY()/fOther);
00193                 setZ(getZ()/fOther);
00194                 return *this;
00195         };
00196 
00197         const VVector operator+(const VVector & vecOther) const
00198         {
00199                 VVector vecNew = *this;
00200                 vecNew += vecOther;
00201                 return vecNew;
00202         };
00203 
00204         const VVector operator-(const VVector & vecOther) const
00205         {
00206                 VVector vecNew = *this;
00207                 vecNew -= vecOther;
00208                 return vecNew;
00209         };
00210 
00211         const VVector operator*(const VVector & vecOther) const
00212         {
00213                 VVector vecNew = *this;
00214                 vecNew *= vecOther;
00215                 return vecNew;
00216         };
00217 
00218         const VVector operator*(const float & fOther) const
00219         {
00220                 VVector vecNew = *this;
00221                 vecNew *= fOther;
00222                 return vecNew;
00223         };
00224 
00225         const VVector operator/(const VVector & vecOther) const
00226         {
00227                 VVector vecNew = *this;
00228                 vecNew /= vecOther;
00229                 return vecNew;
00230         };
00231 
00232         const VVector operator/(const float & fOther) const
00233         {
00234                 VVector vecNew = *this;
00235                 vecNew /= fOther;
00236                 return vecNew;
00237         };
00238 
00239         const VVector operator-() const
00240         {
00241                 return VVector(-getX(),-getY(),-getZ());
00242         };
00243 
00244 private:
00245         float m_vfElements[3];
00246 };
00247 
00248 inline std::ostream & operator<< (std::ostream & os, const VVector & vecVector)
00249 {
00250         os << "(" << vecVector.getX() << ";" << vecVector.getY() << ";" << vecVector.getZ() << ")";
00251         return os;
00252 }
00253 
00254 inline std::istream & operator>> (std::istream & is, VVector & vecVector)
00255 {
00256 
00257         float fX,fY,fZ;
00258         if (is >> eat("(") >> fX >> eat(";") >> fY >> eat(";") >> fZ >> eat(")"))
00259                 vecVector.set(fX,fY,fZ);
00260 
00261         return is;
00262 }

Generated on Mon Jan 21 01:15:16 2008 for FlowVis by  doxygen 1.5.4