Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef Q_VECTOR_H
- #define Q_VECTOR_H
- #include <cmath>
- typedef float vec_t;
- typedef vec_t vec3_t[3];
- class Vector3 {
- public:
- inline Vector3(float x = 0, float y = 0, float z = 0)
- { a[0]=x; a[1]=y; a[2]=z; }
- inline float DotProduct(const vec3_t &v) const
- { return a[0]*v[0] + a[1]*v[1] + a[2]*v[2]; }
- inline Vector3 operator - (const vec3_t &v) const
- { return Vector3(a[0]-v[0], a[1]-v[1], a[2]-v[2]); }
- inline Vector3 operator + (const vec3_t &v) const
- { return Vector3(a[0]+v[0], a[1]+v[1], a[2]+v[2]); }
- inline Vector3 & operator = (const vec3_t &v)
- { a[0]=v[0]; a[1]=v[0]; a[2]=v[2]; return *this; }
- inline Vector3 operator * (float f) const
- { return Vector3(a[0]*f, a[1]*f, a[2]*f); }
- inline Vector3 & operator -= (const vec3_t &v)
- { a[0]-=v[0]; a[1]-=v[1]; a[2]-=v[2]; return *this; }
- inline Vector3 & operator += (const vec3_t &v)
- { a[0]+=v[0]; a[1]+=v[1]; a[2]+=v[2]; return *this; }
- inline Vector3 & operator *= (float f)
- { a[0]*=f; a[1]*=f; a[2]*=f; return *this; }
- inline void Clear()
- { a[0]=a[1]=a[2]=0; }
- inline Vector3 operator ~ () const
- { return Vector3(-a[0], -a[1], -a[2]); }
- inline void Set(float x, float y, float z)
- { a[0]=x; a[1]=y; a[2]=z; }
- inline void Snap()
- { a[0]=(int)a[0]; a[1]=(int)a[1]; a[2]=(int)a[2]; }
- inline void Normalize()
- {
- float len, ilen;
- len = this->Length();
- if (len) {
- ilen = 1/len;
- a[0] *= ilen;
- a[1] *= ilen;
- a[2] *= ilen;
- }
- }
- inline float Length() const
- { return (float)sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]); }
- inline float LengthSquared() const
- { return a[0]*a[0] + a[1]*a[1] + a[2]*a[2]; }
- inline vec_t & operator [] (int index)
- { return a[index]; }
- inline const vec_t & operator [] (int index) const
- { return a[index]; }
- inline operator vec3_t &()
- { return a; }
- inline operator const vec3_t &() const
- { return a; }
- inline bool operator == (const vec3_t &v) const
- { return a[0]==v[0] && a[1]==v[1] && a[2]==v[2]; }
- inline bool operator != (const vec3_t &v) const
- { return a[0]!=v[0] || a[1]!=v[1] || a[2]!=v[2]; }
- inline Vector3 CrossProduct(const vec3_t &v) const
- { 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]); }
- private:
- vec3_t a;
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement