diff options
author | vimene <vincent.menegaux@gmail.com> | 2023-11-22 20:32:48 +0100 |
---|---|---|
committer | vimene <vincent.menegaux@gmail.com> | 2023-11-22 20:32:48 +0100 |
commit | 4558a2a704bf75266f7262f8dd41bb1c9b094e1d (patch) | |
tree | 3042dedc701d0458d5ede0a85d554ec174c61a6f /src/math/math_vector.cpp | |
parent | 6322e8d7e6e4ddb1c0a0b3a00a1b516d1a84df49 (diff) | |
download | engine-4558a2a704bf75266f7262f8dd41bb1c9b094e1d.tar.gz |
code refactoring
Diffstat (limited to 'src/math/math_vector.cpp')
-rw-r--r-- | src/math/math_vector.cpp | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/math/math_vector.cpp b/src/math/math_vector.cpp new file mode 100644 index 0000000..baa2448 --- /dev/null +++ b/src/math/math_vector.cpp @@ -0,0 +1,173 @@ +#include "math/math_vector.h" +#include <cmath> + +MathVector2::MathVector2() { +} + +MathVector2::MathVector2(float x, float y) : x{x}, y{y} { +} + +bool MathVector2::operator==(MathVector2 other) const { + return x == other.x && y == other.y; +} + +bool MathVector2::operator!=(MathVector2 other) const { + return !(*this == other); +} + +MathVector2 MathVector2::operator+() const { + return *this; +} + +MathVector2 MathVector2::operator-() const { + return { -x, -y }; +} + +MathVector2 MathVector2::operator+(MathVector2 other) const { + return { x + other.x, y + other.y }; +} + +MathVector2 MathVector2::operator-(MathVector2 other) const { + return *this + (-other); +} + +float MathVector2::det(MathVector2 other) const { + return this->x * other.y - other.x * this->y; +} + +MathVector2 MathVector2::round() const { + return { std::round(x), std::round(y) }; +} + +MathVector2 operator*(float n, MathVector2 other) { + return { n * other.x, n * other.y }; +} + +MathVector2 operator*(MathVector2 other, float n) { + return n * other; +} + +MathVector2 operator/(MathVector2 other, float n) { + return { other.x / n, other.y / n }; +} + +MathVector3::MathVector3() { +} + +MathVector3::MathVector3(float x, float y, float z) : x{x}, y{y}, z{z} { +} + +bool MathVector3::operator==(MathVector3 other) const { + return x == other.x && y == other.y && z == other.z; +} + +bool MathVector3::operator!=(MathVector3 other) const { + return !(*this == other); +} + +MathVector3 MathVector3::operator+() const { + return *this; +} + +MathVector3 MathVector3::operator-() const { + return { -x, -y, -z }; +} + +MathVector3 MathVector3::operator+(MathVector3 other) const { + return { x + other.x, y + other.y, z + other.z }; +} + +MathVector3 MathVector3::operator-(MathVector3 other) const { + return *this + (-other); +} + +MathVector3 MathVector3::round() const { + return { std::round(x), std::round(y), std::round(z) }; +} + +MathVector2 MathVector3::xy() const { + return { x, y }; +} + +MathVector3 MathVector3::cross(MathVector3 other) const { + return { + y * other.z - z * other.y, + z * other.x - x * other.z, + x * other.y - y * other.x + }; +} + +MathVector3 operator*(float n, MathVector3 other) { + return { n * other.x, n * other.y, n * other.z }; +} + +MathVector3 operator*(MathVector3 other, float n) { + return n * other; +} + +MathVector3 operator/(MathVector3 other, float n) { + return { other.x / n, other.y / n, other.z / n }; +} + +MathVector4::MathVector4() { +} + +MathVector4::MathVector4(float x, float y, float z, float w) : x{x}, y{y}, z{z}, w{w} { +} + +MathVector4::MathVector4(float x, float y, float z) : x{x}, y{y}, z{z}, w{1.f} { +} + +MathVector4::MathVector4(MathVector3 v, float w) : x{v.x}, y{v.y}, z{v.z}, w{w} { +} + +MathVector4::MathVector4(MathVector3 v) : x{v.x}, y{v.y}, z{v.z}, w{1.f} { +} + +bool MathVector4::operator==(MathVector4 other) const { + return x == other.x && y == other.y && z == other.z && w == other.w; +} + +bool MathVector4::operator!=(MathVector4 other) const { + return !(*this == other); +} + +MathVector4 MathVector4::operator+() const { + return *this; +} + +MathVector4 MathVector4::operator-() const { + return { -x, -y, -z, -w }; +} + +MathVector4 MathVector4::operator+(MathVector4 other) const { + return { x + other.x, y + other.y, z + other.z, w + other.w }; +} + +MathVector4 MathVector4::operator-(MathVector4 other) const { + return *this + (-other); +} + +MathVector4 MathVector4::round() const { + return { std::round(x), std::round(y), std::round(z), std::round(w) }; +} + +MathVector3 MathVector4::xyz() const { + return { x, y, z }; +} + +MathVector3 MathVector4::div_by_w() const { + return xyz() / w; +} + +MathVector4 operator*(float n, MathVector4 other) { + return { n * other.x, n * other.y, n * other.z, n * other.w }; +} + +MathVector4 operator*(MathVector4 other, float n) { + return n * other; +} + +MathVector4 operator/(MathVector4 other, float n) { + return { other.x / n, other.y / n, other.z / n, other.w / n }; +} |