Advertisement
Wolfrost

C++ Vector3 class

Apr 3rd, 2016
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Vector3
  2. {
  3. public:
  4.     float x, y, z;
  5.  
  6.     Vector3()
  7.     {
  8.         x = y = z = 0.0f;
  9.     }
  10.  
  11.     Vector3( float X, float Y, float Z )
  12.     {
  13.         x = X; y = Y; z = Z;
  14.     }
  15.  
  16.     Vector3( float XYZ )
  17.     {
  18.         x = XYZ; y = XYZ; z = XYZ;
  19.     }
  20.  
  21.     Vector3( float* v )
  22.     {
  23.         x = v[ 0 ]; y = v[ 1 ]; z = v[ 2 ];
  24.     }
  25.  
  26.     Vector3( const float* v )
  27.     {
  28.         x = v[ 0 ]; y = v[ 1 ]; z = v[ 2 ];
  29.     }
  30.  
  31.     inline Vector3& operator=( const Vector3& v )
  32.     {
  33.         x = v.x; y = v.y; z = v.z; return *this;
  34.     }
  35.  
  36.     inline Vector3& operator=( const float* v )
  37.     {
  38.         x = v[ 0 ]; y = v[ 1 ]; z = v[ 2 ]; return *this;
  39.     }
  40.  
  41.     inline float& operator[]( int i )
  42.     {
  43.         return ( ( float* )this )[ i ];
  44.     }
  45.  
  46.     inline float operator[]( int i ) const
  47.     {
  48.         return ( ( float* )this )[ i ];
  49.     }
  50.  
  51.     inline Vector3& operator+=( const Vector3& v )
  52.     {
  53.         x += v.x; y += v.y; z += v.z; return *this;
  54.     }
  55.  
  56.     inline Vector3& operator-=( const Vector3& v )
  57.     {
  58.         x -= v.x; y -= v.y; z -= v.z; return *this;
  59.     }
  60.  
  61.     inline Vector3& operator*=( const Vector3& v )
  62.     {
  63.         x *= v.x; y *= v.y; z *= v.z; return *this;
  64.     }
  65.  
  66.     inline Vector3& operator/=( const Vector3& v )
  67.     {
  68.         x /= v.x; y /= v.y; z /= v.z; return *this;
  69.     }
  70.  
  71.     inline Vector3& operator+=( float v )
  72.     {
  73.         x += v; y += v; z += v; return *this;
  74.     }
  75.  
  76.     inline Vector3& operator-=( float v )
  77.     {
  78.         x -= v; y -= v; z -= v; return *this;
  79.     }
  80.  
  81.     inline Vector3& operator*=( float v )
  82.     {
  83.         x *= v; y *= v; z *= v; return *this;
  84.     }
  85.  
  86.     inline Vector3& operator/=( float v )
  87.     {
  88.         x /= v; y /= v; z /= v; return *this;
  89.     }
  90.  
  91.     inline Vector3 operator-( ) const
  92.     {
  93.         return Vector3( -x, -y, -z );
  94.     }
  95.  
  96.     inline Vector3 operator+( const Vector3& v ) const
  97.     {
  98.         return Vector3( x + v.x, y + v.y, z + v.z );
  99.     }
  100.  
  101.     inline Vector3 operator-( const Vector3& v ) const
  102.     {
  103.         return Vector3( x - v.x, y - v.y, z - v.z );
  104.     }
  105.  
  106.     inline Vector3 operator*( const Vector3& v ) const
  107.     {
  108.         return Vector3( x * v.x, y * v.y, z * v.z );
  109.     }
  110.  
  111.     inline Vector3 operator/( const Vector3& v ) const
  112.     {
  113.         return Vector3( x / v.x, y / v.y, z / v.z );
  114.     }
  115.  
  116.     inline Vector3 operator+( float v ) const
  117.     {
  118.         return Vector3( x + v, y + v, z + v );
  119.     }
  120.  
  121.     inline Vector3 operator-( float v ) const
  122.     {
  123.         return Vector3( x - v, y - v, z - v );
  124.     }
  125.  
  126.     inline Vector3 operator*( float v ) const
  127.     {
  128.         return Vector3( x * v, y * v, z * v );
  129.     }
  130.  
  131.     inline Vector3 operator/( float v ) const
  132.     {
  133.         return Vector3( x / v, y / v, z / v );
  134.     }
  135.  
  136.     inline float Length() const
  137.     {
  138.         return sqrtf( x * x + y * y + z * z );
  139.     }
  140.  
  141.     inline float LengthSqr() const
  142.     {
  143.         return ( x * x + y * y + z * z );
  144.     }
  145.  
  146.     inline float LengthXY() const
  147.     {
  148.         return sqrtf( x * x + y * y );
  149.     }
  150.  
  151.     inline float LengthXZ() const
  152.     {
  153.         return sqrtf( x * x + z * z );
  154.     }
  155.  
  156.     inline float DistTo( const Vector3& v ) const
  157.     {
  158.         return ( *this - v ).Length();
  159.     }
  160.  
  161.     inline float Dot( const Vector3& v ) const
  162.     {
  163.         return ( x * v.x + y * v.y + z * v.z );
  164.     }
  165.  
  166.     inline Vector3 Cross( const Vector3& v ) const
  167.     {
  168.         return Vector3( y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x );
  169.     }
  170.  
  171.     inline bool IsZero() const
  172.     {
  173.         return ( x > -0.01f && x < 0.01f
  174.                  && y > -0.01f && y < 0.01f
  175.                  && z > -0.01f && z < 0.01f );
  176.     }
  177.  
  178.     inline void Reset()
  179.     {
  180.         x = 0.f; y = 0.f; z = 0.f;
  181.     }
  182. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement