From 3b289a2f75b6e96735519a65d93b6babd1b1759f Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 2 Oct 2022 04:34:18 +0200 Subject: Expand Vector and Matrix classes --- src/Math/Vector.hpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 4 deletions(-) (limited to 'src/Math/Vector.hpp') diff --git a/src/Math/Vector.hpp b/src/Math/Vector.hpp index 9c76758..0145b58 100644 --- a/src/Math/Vector.hpp +++ b/src/Math/Vector.hpp @@ -1,9 +1,73 @@ #pragma once -struct Vector3 { +#include +#include +#include +#include + +template +struct Vector { public: - Vector3(float x, float y, float z) - : x(x), y(y), z(z) {}; + Vector(): elements{} {}; + + template + Vector(Args... args) : elements{ args... } {}; + + Vector(T values[S]) { + std::copy(values, values + S, elements); + }; + + T& operator[](size_t index) { + return elements[index]; + } + + Vector operator*(T scalar) const { + Vector result; + for (size_t index; index < S; index++) { + result = this[index] * scalar; + } + return result; + } + + T operator*(Vector other) const { + T result = 0; + for (size_t index = 0; index < S; index++) { + result += this->elements[index] * other[index]; + } + return result; + } + + T x() { + static_assert(S > 0); + return elements[0]; + } + + T y() { + static_assert(S > 1); + return elements[1]; + } + + T z() { + static_assert(S > 2); + return elements[2]; + } + + T w() { + static_assert(S > 3); + return elements[3]; + } + + std::string string() { + std::stringstream str{}; + + str << "[ "; + for (int i = 0; i < S; i++) { + str << elements[i] << " "; + } + str << "]"; + + return str.str(); + } - float x, y, z; + T elements[S]; }; -- cgit 1.4.1