diff options
| author | Mel <einebeere@gmail.com> | 2023-06-12 17:09:55 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2023-06-12 17:14:03 +0200 |
| commit | d0de60dc33df75fbcacb53a09568b14d0fd48cb9 (patch) | |
| tree | 7aefdbb81f114552881834bd5b0d842bc2bdb691 /src/Math/Vector.hpp | |
| parent | 23b0bc4d1ddc9fad3c32e8257497ddd13ac6a155 (diff) | |
| download | meowcraft-d0de60dc33df75fbcacb53a09568b14d0fd48cb9.tar.zst meowcraft-d0de60dc33df75fbcacb53a09568b14d0fd48cb9.zip | |
Multithreaded world generation with Perlin
Diffstat (limited to 'src/Math/Vector.hpp')
| -rw-r--r-- | src/Math/Vector.hpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/Math/Vector.hpp b/src/Math/Vector.hpp index cb5eb24..9cc2d75 100644 --- a/src/Math/Vector.hpp +++ b/src/Math/Vector.hpp @@ -12,13 +12,17 @@ struct Vector { public: Vector(): elements{} {}; - template<typename ...Args> + template<typename ...Args, typename std::enable_if<sizeof...(Args) == S, int>::type = 0> Vector<S, T>(Args... args) : elements{ args... } {}; Vector<S, T>(T values[S]) { std::copy(values, values + S, elements); }; + Vector<S, T>(T scalar) { + std::fill(elements, elements + S, scalar); + }; + Vector<S, T>(Vector<S - 1, T> vector, T scalar) { std::copy(vector.elements, vector.elements + S - 1, elements); elements[S - 1] = scalar; @@ -61,6 +65,10 @@ public: return map([=](auto x) { return x / m; }); } + Vector<S, T> abs() const { + return map([=](auto x) { return std::abs(x); }); + } + Vector<3, T> cross(Vector<3, T> other) const { return { y() * other.z() - z() * other.y(), @@ -81,6 +89,10 @@ public: return map([&](auto i, auto x) { return x + other[i]; }); } + Vector<S, T> operator+(T scalar) const { + return map([=](auto x) { return x + scalar; }); + } + Vector<S, T> operator*(T scalar) const { return map([=](auto x) { return x * scalar; }); } @@ -97,6 +109,10 @@ public: return map([](T x) -> T { return -x; }); } + Vector<S, T> operator/(T scalar) const { + return map([=](auto x) { return x / scalar; }); + } + T x() const { static_assert(S > 0); return elements[0]; |
