diff options
Diffstat (limited to 'src/math/vector.hpp')
| -rw-r--r-- | src/math/vector.hpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/math/vector.hpp b/src/math/vector.hpp index e836e0d..471f30d 100644 --- a/src/math/vector.hpp +++ b/src/math/vector.hpp @@ -2,11 +2,20 @@ #define MATH_VECTOR_HPP #include <cmath> -#include "math/quat.hpp" namespace engine::math { +struct Vector2; +constexpr Vector2 operator*(float n, const Vector2& other); +constexpr Vector2 operator/(const Vector2& other, float n); + struct Vector2 { + static constexpr size_t size = 2; + + static constexpr Vector2 bilerp(const Vector2& v1, const Vector2& v2, const Vector2& v3, float b0, float b1) { + return b0 * v1 + b1 * v2 + (1.f - b0 - b1) * v3; + } + float x, y; constexpr bool operator==(const Vector2& other) const & { @@ -77,6 +86,8 @@ constexpr Vector3 operator*(float n, const Vector3& other); constexpr Vector3 operator/(const Vector3& other, float n); struct Vector3 { + static constexpr size_t size = 3; + static constexpr Vector3 bilerp(const Vector3& v1, const Vector3& v2, const Vector3& v3, float b0, float b1) { return b0 * v1 + b1 * v2 + (1.f - b0 - b1) * v3; } @@ -126,14 +137,6 @@ struct Vector3 { }; } - constexpr Vector3 rot(const Quaternion& q) const & { - return { - (2.f * (q.w * q.w + q.x * q.x) - 1.f) * x + (2.f * (q.x * q.y - q.w * q.z) ) * y + (2.f * (q.x * q.z + q.w * q.y) ) * z, - (2.f * (q.x * q.y + q.w * q.z) ) * x + (2.f * (q.w * q.w + q.y * q.y) - 1.f) * y + (2.f * (q.y * q.z - q.w * q.x) ) * z, - (2.f * (q.x * q.z - q.w * q.y) ) * x + (2.f * (q.y * q.z + q.w * q.x) ) * y + (2.f * (q.w * q.w + q.z * q.z) - 1.f) * z, - }; - } - constexpr float dot(const Vector3& other) const & { return x * other.x + y * other.y + z * other.z; } @@ -168,15 +171,14 @@ constexpr Vector3 operator/(const Vector3& other, float n) { } struct Vector4 { + static constexpr size_t size = 4; + float x, y, z, w; constexpr Vector4() {} constexpr Vector4(float x, float y, float z, float w) : x{x}, y{y}, z{z}, w{w} {} - constexpr Vector4(float x, float y, float z) : x{x}, y{y}, z{z}, w{1.f} {} constexpr Vector4(const Vector2& v, float z, float w) : x{v.x}, y{v.y}, z{z}, w{w} {} - constexpr Vector4(const Vector2& v, float z) : x{v.x}, y{v.y}, z{z}, w{1.f} {} constexpr Vector4(const Vector3& v, float w) : x{v.x}, y{v.y}, z{v.z}, w{w} {} - constexpr Vector4(const Vector3& v) : x{v.x}, y{v.y}, z{v.z}, w{1.f} {} constexpr bool operator==(const Vector4& other) const & { return x == other.x && y == other.y && z == other.z && w == other.w; |
