diff options
author | aap <aap@papnet.eu> | 2019-05-15 16:52:37 +0200 |
---|---|---|
committer | aap <aap@papnet.eu> | 2019-05-15 16:52:37 +0200 |
commit | 600bf0351476a5a21aabb5429132ddf7f52ac0b9 (patch) | |
tree | d8e48b3a581679e33830fb7c98ed69e1e242e2c2 /src/math/Vector.h | |
download | re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.gz re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.bz2 re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.lz re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.xz re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.zst re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.zip |
Diffstat (limited to 'src/math/Vector.h')
-rw-r--r-- | src/math/Vector.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/math/Vector.h b/src/math/Vector.h new file mode 100644 index 00000000..98c3f0ec --- /dev/null +++ b/src/math/Vector.h @@ -0,0 +1,82 @@ +#pragma once + +class CVector +{ +public: + float x, y, z; + CVector(void) {} + CVector(float x, float y, float z) : x(x), y(y), z(z) {} +// CVector(rw::V3d const &v) : x(v.x), y(v.y), z(v.z) {} + float Magnitude(void) const { return sqrt(x*x + y*y + z*z); } + float MagnitudeSqr(void) const { return x*x + y*y + z*z; } + float Magnitude2D(void) const { return sqrt(x*x + y*y); } + void Normalise(void){ + float sq = MagnitudeSqr(); + if(sq > 0.0f){ + float invsqrt = 1.0f/sqrt(sq); + x *= invsqrt; + y *= invsqrt; + z *= invsqrt; + }else + x = 1.0f; + } +// rw::V3d ToRW(void){ +// return rw::makeV3d(x, y, z); +// } +// void operator=(rw::V3d const &rhs){ +// x = rhs.x; +// y = rhs.y; +// z = rhs.z; +// } + CVector operator-(const CVector &rhs) const { + return CVector(x-rhs.x, y-rhs.y, z-rhs.z); + } + CVector operator+(const CVector &rhs) const { + return CVector(x+rhs.x, y+rhs.y, z+rhs.z); + } + CVector operator*(float t) const { + return CVector(x*t, y*t, z*t); + } + CVector operator/(float t) const { + return CVector(x/t, y/t, z/t); + } + CVector &operator-=(const CVector &rhs) { + this->x -= rhs.x; + this->y -= rhs.y; + this->z -= rhs.z; + return *this; + } + CVector &operator+=(const CVector &rhs) { + this->x += rhs.x; + this->y += rhs.y; + this->z += rhs.z; + return *this; + } + CVector &operator*=(float t) { + this->x *= t; + this->y *= t; + this->z *= t; + return *this; + } + CVector &operator/=(float t) { + this->x /= t; + this->y /= t; + this->z /= t; + return *this; + } +}; + +inline float +DotProduct(const CVector &v1, const CVector &v2) +{ + return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z; +} + +inline CVector +CrossProduct(const CVector &v1, const CVector &v2) +{ + return CVector( + v1.y*v2.z - v1.z*v2.y, + v1.z*v2.x - v1.x*v2.z, + v1.x*v2.y - v1.y*v2.x); +} |