Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Vector2
- {
- public:
- float x, y;
- inline void Init(float ix, float iy) { x = ix; y = iy; }
- Vector2 ( void ) { x = y = 0.0f; }
- Vector2 ( float X, float Y ) { x = X; y = Y; }
- Vector2 ( float* V ) { x = V[0]; y = V[1]; }
- Vector2 ( const float* V ) { x = V[0]; y = V[1]; }
- Vector2 ( const Vector2& V ) { x = V.x; y = V.y; }
- inline Vector2& operator= ( const Vector2& v ) { x = v.x; y = v.y; return *this; }
- inline float& operator[] ( int i ) { return ( ( float* )this )[i]; }
- inline float operator[] ( int i ) const { return ( ( float* )this )[i]; }
- inline Vector2& operator+=( const Vector2& v ) { x += v.x; y += v.y; return *this; }
- inline Vector2& operator-=( const Vector2& v ) { x -= v.x; y -= v.y; return *this; }
- inline Vector2& operator*=( const Vector2& v ) { x *= v.x; y *= v.y; return *this; }
- inline Vector2& operator/=( const Vector2& v ) { x /= v.x; y /= v.y; return *this; }
- inline Vector2& operator+=( float v ) { x += v; y += v; return * this; }
- inline Vector2& operator-=( float v ) { x -= v; y -= v; return *this; }
- inline Vector2& operator*=( float v ) { x *= v; y *= v; return *this; }
- inline Vector2& operator/=( float v ) { x /= v; y /= v; return *this; }
- inline Vector2 operator+ ( const Vector2& v )const { return Vector2( x + v.x, y + v.y ); }
- inline Vector2 operator- ( const Vector2& v )const { return Vector2( x - v.x, y - v.y ); }
- inline Vector2 operator* ( const Vector2& v )const { return Vector2( x * v.x, y * v.y ); }
- inline Vector2 operator/ ( const Vector2& v )const { return Vector2( x / v.x, y / v.y ); }
- inline Vector2 operator+ ( float v ) const { return Vector2( x + v, y + v ); }
- inline Vector2 operator- ( float v ) const { return Vector2( x - v, y - v ); }
- inline Vector2 operator* ( float v ) const { return Vector2( x * v, y * v ); }
- inline Vector2 operator/ ( float v ) const { return Vector2( x / v, y / v ); }
- void Set ( float X = 0.0f, float Y = 0.0f ) { x = X; y = Y; }
- float Length ( void ) const { return sqrtf( x * x + y * y ); }
- float LengthSqr ( void ) const { return ( x * x + y * y ); }
- float DistTo ( const Vector2& v ) const { return ( *this - v ).Length( ); }
- float DistToSqr ( const Vector2& v ) const { return ( *this - v ).LengthSqr( ); }
- float Dot ( const Vector2& v ) const { return ( x * v.x + y * v.y ); }
- bool IsZero ( void ) const { return ( x > -0.01f && x < 0.01f && y > -0.01f && y < 0.01f ); }
- };
- class Vector
- {
- public:
- float x, y, z;
- inline void Init(float ix, float iy, float iz) { x = ix; y = iy; z = iz; }
- Vector ( void ) { x = 0; y = 0; z = 0; };
- Vector ( float X, float Y, float Z ) { x = X; y = Y; z = Z; };
- Vector ( float* V ) { x = V[0]; y = V[1]; z = V[2]; }
- Vector ( const float* V ) { x = V[0]; y = V[1]; z = V[2]; }
- Vector ( const Vector& V ) { x = V.x; y = V.y; z = V.z; }
- inline Vector& operator= ( const Vector& v ) { x = v.x; y = v.y; z = v.z; return *this; }
- inline float& operator[] ( int i ) { return ( ( float* )this )[i]; }
- inline float operator[] ( int i ) const { return ( ( float* )this )[i]; }
- inline Vector& operator+=( const Vector& v ) { x += v.x; y += v.y; z += v.z; return *this; }
- inline Vector& operator-=( const Vector& v ) { x -= v.x; y -= v.y; z -= v.z; return *this; }
- inline Vector& operator*=( const Vector& v ) { x *= v.x; y *= v.y; z *= v.z; return *this; }
- inline Vector& operator/=( const Vector& v ) { x /= v.x; y /= v.y; z /= v.z; return *this; }
- inline Vector& operator+=( float v ) { x += v; y += v; z += v; return *this; }
- inline Vector& operator-=( float v ) { x -= v; y -= v; z -= v; return *this; }
- inline Vector& operator*=( float v ) { x *= v; y *= v; z *= v; return *this; }
- inline Vector& operator/=( float v ) { x /= v; y /= v; z /= v; return *this; }
- inline Vector operator+ ( const Vector& v ) const { return Vector( x + v.x, y + v.y, z + v.z ); }
- inline Vector operator- ( const Vector& v ) const { return Vector( x - v.x, y - v.y, z - v.z ); }
- inline Vector operator* ( const Vector& v ) const { return Vector( x * v.x, y * v.y, z * v.z ); }
- inline Vector operator/ ( const Vector& v ) const { return Vector( x / v.x, y / v.y, z / v.z ); }
- inline Vector operator+ ( float v ) const { return Vector( x + v, y + v, z + v ); }
- inline Vector operator- ( float v ) const { return Vector( x - v, y - v, z - v ); }
- inline Vector operator* ( float v ) const { return Vector( x * v, y * v, z * v ); }
- inline Vector operator/ ( float v ) const { return Vector( x / v, y / v, z / v ); }
- float* Base() { return (float*)this; }
- float* Base() const { return (float*)this; }
- void Set( float X = 0.0f, float Y = 0.0f, float Z = 0.0f ) { x = X; y = Y; z = Z; }
- float LengthSqr( void ) { return (x*x + y*y + z*z); }
- float Length( void ) { return sqrtf(x*x + y*y + z*z); }
- float DistTo ( const Vector& v ) const { return ( *this - v ).Length( ); }
- float DistToSqr ( const Vector& v ) const { return ( *this - v ).LengthSqr( ); }
- float Dot ( const Vector& v ) const { return ( x * v.x + y * v.y + z * v.z ); }
- bool IsZero ( void ) const { return ( x > -0.01f && x < 0.01f && y > -0.01f && y < 0.01f && z > -0.01f && z < 0.01f ); }
- };
- class Vector4
- {
- public:
- float x, y, z, w;
- inline void Init(float ix, float iy, float iz, float iw) { x = ix; y = iy; z = iz; w = iw; }
- Vector4 ( void ) { x = 0; y = 0; z = 0; w = 0; }
- Vector4 ( float X, float Y, float Z, float W ) { x = X; y = Y; z = Z; w = W; }
- Vector4 ( float* V ) { x = V[0]; y = V[1]; z = V[2]; w = V[3]; }
- Vector4 ( const float* V ) { x = V[0]; y = V[1]; z = V[2]; w = V[3]; }
- Vector4 ( const Vector4& V ) { x = V.x; y = V.y; z = V.z; w = V.w; }
- bool IsValid() const { return !isinf( x ) && !isinf( y ) && !isinf( z ) && !isinf( w ); }
- void Invalidate() { x = y = z = w = std::numeric_limits<float>::infinity(); }
- inline Vector4& operator= ( const Vector4& V ) { x = V.x; y = V.y; z = V.z; w = V.w; return *this; }
- inline float& operator[]( int i ) { return ((float*)this)[i]; }
- inline float operator[]( int i ) const { return ((float*)this)[i]; }
- inline Vector4& operator+=( const Vector4& v ) { x += v.x; y += v.y; z += v.z; w += v.w; return *this; }
- inline Vector4& operator-=( const Vector4& v ) { x -= v.x; y -= v.y; z -= v.z; w -= v.w; return *this; }
- inline Vector4& operator*=( const Vector4& v ) { x *= v.x; y *= v.y; z *= v.z; w *= v.w; return *this; }
- inline Vector4& operator/=( const Vector4& v ) { x /= v.x; y /= v.y; z /= v.z; w /= v.w; return *this; }
- inline Vector4& operator+=( float v ) { x += v; y += v; z += v; w += v; return *this; }
- inline Vector4& operator-=( float v ) { x -= v; y -= v; z -= v; w += v; return *this; }
- inline Vector4& operator*=( float v ) { x *= v; y *= v; z *= v; w += v; return *this; }
- inline Vector4& operator/=( float v ) { x /= v; y /= v; z /= v; w += v; return *this; }
- inline Vector4 operator+ ( const Vector4& v ) const { return Vector4( x + v.x, y + v.y, z + v.z, w + v.w ); }
- inline Vector4 operator- ( const Vector4& v ) const { return Vector4( x - v.x, y - v.y, z - v.z, w - v.w ); }
- inline Vector4 operator* ( const Vector4& v ) const { return Vector4( x * v.x, y * v.y, z * v.z, w * v.w ); }
- inline Vector4 operator/ ( const Vector4& v ) const { return Vector4( x / v.x, y / v.y, z / v.z, w / v.w ); }
- inline Vector4 operator+ ( float v ) const { return Vector4( x + v, y + v, z + v, w + v ); }
- inline Vector4 operator- ( float v ) const { return Vector4( x - v, y - v, z - v, w - v ); }
- inline Vector4 operator* ( float v ) const { return Vector4( x * v, y * v, z * v, w * v ); }
- inline Vector4 operator/ ( float v ) const { return Vector4( x / v, y / v, z / v, w / v ); }
- float* Base() { return (float*)this; }
- float* Base() const { return (float*)this; }
- void Random( float minVal, float maxVal )
- {
- x = minVal + ((float)rand() / RAND_MAX) * (maxVal - minVal);
- y = minVal + ((float)rand() / RAND_MAX) * (maxVal - minVal);
- z = minVal + ((float)rand() / RAND_MAX) * (maxVal - minVal);
- w = minVal + ((float)rand() / RAND_MAX) * (maxVal - minVal);
- }
- void Zero() { x = y = z = w = 0.0f; }
- inline bool operator==( const Vector4& src ) const { return (src.x == x) && (src.y == y) && (src.z == z) && (src.w == w); }
- inline bool operator!=( const Vector4& src ) const { return (src.x != x) && (src.y != y) && (src.z != z) && (src.w != w); }
- void Negate() { x = -x; y = -y; z = -z; w = -w; }
- float Length() const { return sqrt( x*x + y*y + z*z + w*w ); }
- float LengthSqr() const { return ( x*x + y*y + z*z + w*w ); }
- bool IsZero( float tolerance = 0.01f ) const
- {
- return (x > -tolerance && x < tolerance &&
- y > -tolerance && y < tolerance &&
- z > -tolerance && z < tolerance &&
- w > -tolerance && w < tolerance);
- }
- float NormalizeInPlace() {}
- Vector4 Normalized() const;
- bool IsLengthGreaterThan( float val ) const;
- bool IsLengthLessThan( float val ) const;
- bool WithinAABox( Vector4 const &boxmin, Vector4 const &boxmax )
- {
- return (
- (x >= boxmin.x) && (x <= boxmax.x) &&
- (y >= boxmin.y) && (y <= boxmax.y) &&
- (z >= boxmin.z) && (z <= boxmax.z) &&
- (w >= boxmin.w) && (w <= boxmax.w)
- );
- }
- float DistTo( const Vector4 &vOther ) const
- {
- Vector4 delta;
- delta = *this - vOther;
- return delta.Length();
- }
- float DistToSqr( const Vector4 &vOther ) const
- {
- Vector4 delta;
- delta.x = x - vOther.x;
- delta.y = y - vOther.y;
- delta.z = z - vOther.z;
- delta.w = w - vOther.w;
- return delta.LengthSqr();
- }
- void CopyToArray( float* rgfl ) const
- {
- rgfl[0] = x, rgfl[1] = y, rgfl[2] = z; rgfl[3] = w;
- }
- void MulAdd( const Vector4& a, const Vector4& b, float scalar )
- {
- x = a.x + b.x * scalar;
- y = a.y + b.y * scalar;
- z = a.z + b.z * scalar;
- w = a.w + b.w * scalar;
- }
- float Dot( const Vector4& b ) const
- {
- return (x*b.x + y*b.y + z*b.z + w*b.w);
- }
- Vector4 ProjectOnto( const Vector4& onto )
- {
- return onto * (this->Dot( onto ) / (onto.LengthSqr()));
- }
- Vector4 Min( const Vector4 &vOther ) const {
- return Vector4( x < vOther.x ? x : vOther.x,
- y < vOther.y ? y : vOther.y,
- z < vOther.z ? z : vOther.z,
- w < vOther.w ? w : vOther.w );
- }
- Vector4 Max( const Vector4 &vOther ) const {
- return Vector4( x > vOther.x ? x : vOther.x,
- y > vOther.y ? y : vOther.y,
- z > vOther.z ? z : vOther.z,
- w > vOther.w ? w : vOther.w );
- }
- };
- // Hehe
- typedef Vector QAngle;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement