Advertisement
Guest User

Simple Vector3 class

a guest
Apr 15th, 2013
1,187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | None | 0 0
  1. #ifndef Q_VECTOR_H
  2. #define Q_VECTOR_H
  3.  
  4. #include <cmath>
  5.  
  6. typedef float vec_t;
  7. typedef vec_t vec3_t[3];
  8.  
  9. class Vector3 {
  10. public:
  11.     inline Vector3(float x = 0, float y = 0, float z = 0)
  12.         { a[0]=x; a[1]=y; a[2]=z; }
  13.  
  14.     inline float DotProduct(const vec3_t &v) const
  15.         { return a[0]*v[0] + a[1]*v[1] + a[2]*v[2]; }
  16.  
  17.     inline Vector3 operator - (const vec3_t &v) const
  18.         { return Vector3(a[0]-v[0], a[1]-v[1], a[2]-v[2]); }
  19.  
  20.     inline Vector3 operator + (const vec3_t &v) const
  21.         { return Vector3(a[0]+v[0], a[1]+v[1], a[2]+v[2]); }
  22.  
  23.     inline Vector3 & operator = (const vec3_t &v)
  24.         { a[0]=v[0]; a[1]=v[0]; a[2]=v[2]; return *this; }
  25.    
  26.     inline Vector3 operator * (float f) const
  27.         { return Vector3(a[0]*f, a[1]*f, a[2]*f); }
  28.  
  29.     inline Vector3 & operator -= (const vec3_t &v)
  30.         { a[0]-=v[0]; a[1]-=v[1]; a[2]-=v[2]; return *this; }
  31.  
  32.     inline Vector3 & operator += (const vec3_t &v)
  33.         { a[0]+=v[0]; a[1]+=v[1]; a[2]+=v[2]; return *this; }
  34.  
  35.     inline Vector3 & operator *= (float f)
  36.         { a[0]*=f; a[1]*=f; a[2]*=f; return *this; }
  37.  
  38.     inline void Clear()
  39.         { a[0]=a[1]=a[2]=0; }
  40.  
  41.     inline Vector3 operator ~ () const
  42.         { return Vector3(-a[0], -a[1], -a[2]); }
  43.  
  44.     inline void Set(float x, float y, float z)
  45.         { a[0]=x; a[1]=y; a[2]=z; }
  46.  
  47.     inline void Snap()
  48.         { a[0]=(int)a[0]; a[1]=(int)a[1]; a[2]=(int)a[2]; }
  49.  
  50.     inline void Normalize()
  51.     {
  52.         float len, ilen;
  53.         len = this->Length();
  54.         if (len) {
  55.             ilen = 1/len;
  56.             a[0] *= ilen;
  57.             a[1] *= ilen;
  58.             a[2] *= ilen;
  59.         }
  60.     }
  61.     inline float Length() const
  62.         { return (float)sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]); }
  63.  
  64.     inline float LengthSquared() const
  65.         { return a[0]*a[0] + a[1]*a[1] + a[2]*a[2]; }
  66.  
  67.     inline vec_t & operator [] (int index)
  68.         { return a[index]; }
  69.  
  70.     inline const vec_t & operator [] (int index) const
  71.         { return a[index]; }
  72.  
  73.     inline operator vec3_t &()
  74.         { return a; }
  75.  
  76.     inline operator const vec3_t &() const
  77.         { return a; }
  78.  
  79.     inline bool operator == (const vec3_t &v) const
  80.         { return a[0]==v[0] && a[1]==v[1] && a[2]==v[2]; }
  81.  
  82.     inline bool operator != (const vec3_t &v) const
  83.         { return a[0]!=v[0] || a[1]!=v[1] || a[2]!=v[2]; }
  84.  
  85.     inline Vector3 CrossProduct(const vec3_t &v) const
  86.         { return Vector3(a[1]*v[2] - a[2]*v[1], a[2]*v[0] - a[0]*v[2], a[0]*v[1] - a[1]*v[0]); }
  87.  
  88. private:
  89.     vec3_t a;
  90. };
  91.  
  92. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement