aboutsummaryrefslogtreecommitdiff
path: root/src/math
diff options
context:
space:
mode:
authorvimene <vincent.menegaux@gmail.com>2023-11-22 20:32:48 +0100
committervimene <vincent.menegaux@gmail.com>2023-11-22 20:32:48 +0100
commit4558a2a704bf75266f7262f8dd41bb1c9b094e1d (patch)
tree3042dedc701d0458d5ede0a85d554ec174c61a6f /src/math
parent6322e8d7e6e4ddb1c0a0b3a00a1b516d1a84df49 (diff)
downloadengine-4558a2a704bf75266f7262f8dd41bb1c9b094e1d.tar.gz
code refactoring
Diffstat (limited to 'src/math')
-rw-r--r--src/math/math_vector.cpp173
-rw-r--r--src/math/math_vector.h69
2 files changed, 242 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 };
+}
diff --git a/src/math/math_vector.h b/src/math/math_vector.h
new file mode 100644
index 0000000..668a3f3
--- /dev/null
+++ b/src/math/math_vector.h
@@ -0,0 +1,69 @@
+#ifndef MATH_MATH_VECTOR_H
+#define MATH_MATH_VECTOR_H
+
+class MathVector2 {
+ public:
+ float x, y;
+
+ MathVector2();
+ MathVector2(float x, float y);
+ bool operator==(MathVector2 other) const;
+ bool operator!=(MathVector2 other) const;
+ MathVector2 operator+() const;
+ MathVector2 operator-() const;
+ MathVector2 operator+(MathVector2 other) const;
+ MathVector2 operator-(MathVector2 other) const;
+ float det(MathVector2 other) const;
+ MathVector2 round() const;
+};
+
+MathVector2 operator*(float n, MathVector2 other);
+MathVector2 operator*(MathVector2 other, float n);
+MathVector2 operator/(MathVector2 other, float n);
+
+class MathVector3 {
+ public:
+ float x, y, z;
+
+ MathVector3();
+ MathVector3(float x, float y, float z);
+ bool operator==(MathVector3 other) const;
+ bool operator!=(MathVector3 other) const;
+ MathVector3 operator+() const;
+ MathVector3 operator-() const;
+ MathVector3 operator+(MathVector3 other) const;
+ MathVector3 operator-(MathVector3 other) const;
+ MathVector3 round() const;
+ MathVector2 xy() const;
+ MathVector3 cross(MathVector3 other) const;
+};
+
+MathVector3 operator*(float n, MathVector3 other);
+MathVector3 operator*(MathVector3 other, float n);
+MathVector3 operator/(MathVector3 other, float n);
+
+class MathVector4 {
+ public:
+ float x, y, z, w;
+
+ MathVector4();
+ MathVector4(float x, float y, float z, float w);
+ MathVector4(float x, float y, float z);
+ MathVector4(MathVector3 v, float w);
+ MathVector4(MathVector3 v);
+ bool operator==(MathVector4 other) const;
+ bool operator!=(MathVector4 other) const;
+ MathVector4 operator+() const;
+ MathVector4 operator-() const;
+ MathVector4 operator+(MathVector4 other) const;
+ MathVector4 operator-(MathVector4 other) const;
+ MathVector4 round() const;
+ MathVector3 xyz() const;
+ MathVector3 div_by_w() const;
+};
+
+MathVector4 operator*(float n, MathVector4 other);
+MathVector4 operator*(MathVector4 other, float n);
+MathVector4 operator/(MathVector4 other, float n);
+
+#endif // MATH_MATH_VECTOR_H