Advertisement
Guest User

vec3.h

a guest
Jan 18th, 2014
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #ifndef CVec3_h
  2. #define CVec3_h
  3.  
  4. #include <cmath>
  5.  
  6. class CVec3
  7. {
  8. public:
  9.     // Data
  10.     float x, y, z;
  11.  
  12.     // Ctors
  13.     CVec3( float InX, float InY, float InZ ) : x( InX ), y( InY ), z( InZ )
  14.         {
  15.         }
  16.     CVec3( ) : x(0), y(0), z(0)
  17.         {
  18.         }
  19.  
  20.     // Operator Overloads
  21.     inline bool operator== (const CVec3& V2) const
  22.         {
  23.         return (x == V2.x && y == V2.y && z == V2.z);
  24.         }
  25.  
  26.     inline CVec3 operator+ (const CVec3& V2) const
  27.         {
  28.         return CVec3( x + V2.x,  y + V2.y,  z + V2.z);
  29.         }
  30.     inline CVec3 operator- (const CVec3& V2) const
  31.         {
  32.         return CVec3( x - V2.x,  y - V2.y,  z - V2.z);
  33.         }
  34.     inline CVec3 operator- ( ) const
  35.         {
  36.         return CVec3(-x, -y, -z);
  37.         }
  38.  
  39.     inline CVec3 operator/ (float S ) const
  40.         {
  41.         float fInv = 1.0f / S;
  42.         return CVec3 (x * fInv , y * fInv, z * fInv);
  43.         }
  44.     inline CVec3 operator/ (const CVec3& V2) const
  45.         {
  46.         return CVec3 (x / V2.x,  y / V2.y,  z / V2.z);
  47.         }
  48.     inline CVec3 operator* (const CVec3& V2) const
  49.         {
  50.         return CVec3 (x * V2.x,  y * V2.y,  z * V2.z);
  51.         }
  52.     inline CVec3 operator* (float S) const
  53.         {
  54.         return CVec3 (x * S,  y * S,  z * S);
  55.         }
  56.  
  57.     inline void operator+= ( const CVec3& V2 )
  58.         {
  59.         x += V2.x;
  60.         y += V2.y;
  61.         z += V2.z;
  62.         }
  63.     inline void operator-= ( const CVec3& V2 )
  64.         {
  65.         x -= V2.x;
  66.         y -= V2.y;
  67.         z -= V2.z;
  68.         }
  69.  
  70.     inline float operator[] ( int i )
  71.         {
  72.         if ( i == 0 ) return x;
  73.         else if ( i == 1 ) return y;
  74.         else return z;
  75.         }
  76.  
  77.     // Functions
  78.     inline float Dot( const CVec3 &V1 ) const
  79.         {
  80.         return V1.x*x + V1.y*y + V1.z*z;
  81.         }
  82.  
  83.     inline CVec3 CrossProduct( const CVec3 &V2 ) const
  84.         {
  85.         return CVec3(
  86.             y * V2.z  -  z * V2.y,
  87.             z * V2.x  -  x * V2.z,
  88.             x * V2.y  -  y * V2.x   );
  89.         }
  90.  
  91.     // Return vector rotated by the 3x3 portion of matrix m
  92.     // (provided because it's used by bbox.cpp in article 21)
  93.     CVec3 RotByMatrix( const float m[16] ) const
  94.     {
  95.     return CVec3(
  96.         x*m[0] + y*m[4] + z*m[8],
  97.         x*m[1] + y*m[5] + z*m[9],
  98.         x*m[2] + y*m[6] + z*m[10] );
  99.     }
  100.  
  101.     // These require math.h for the sqrtf function
  102.     float Magnitude( ) const
  103.         {
  104.         return sqrtf( x*x + y*y + z*z );
  105.         }
  106.  
  107.     float Distance( const CVec3 &V1 ) const
  108.         {
  109.         return ( *this - V1 ).Magnitude();
  110.         }
  111.  
  112.     inline void Normalize()
  113.         {
  114.         float fMag = ( x*x + y*y + z*z );
  115.         if (fMag == 0) {return;}
  116.  
  117.         float fMult = 1.0f/sqrtf(fMag);
  118.         x *= fMult;
  119.         y *= fMult;
  120.         z *= fMult;
  121.         return;
  122.         }
  123. };
  124. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement