From f1fc192ddc4c739fa8b4b376c759b7d3218a34eb Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 7 Jul 2023 21:39:42 +0200 Subject: Chunk-bound tree decoration --- src/Math/Matrix.hpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/Math/Matrix.hpp') diff --git a/src/Math/Matrix.hpp b/src/Math/Matrix.hpp index 69241d3..d467f72 100644 --- a/src/Math/Matrix.hpp +++ b/src/Math/Matrix.hpp @@ -9,14 +9,14 @@ template struct Matrix { Matrix() : elements{} {}; - explicit Matrix(T scalar) { + explicit Matrix(const T scalar) { std::fill(elements, elements + R * C, scalar); }; template = 0> Matrix(Args... args): elements{ args... } {}; - explicit Matrix(T values[R * C]) { + explicit Matrix(const T values[R * C]) { std::copy(values, values + R * C, elements); }; @@ -67,11 +67,11 @@ struct Matrix { return rotation_x * rotation_y * rotation_z; } - Vector row(size_t index) { + Vector row(size_t index) const { return { &elements[index * C] }; } - Vector col(size_t index) { + Vector col(size_t index) const { Vector result{}; for (int i = 0; i < R; i++) { result[i] = this->operator()(index, i); @@ -79,7 +79,7 @@ struct Matrix { return result; } - Matrix transpose() { + Matrix transpose() const { Matrix result{}; for (int y = 0; y < R; y++) { for (int x = 0; x < C; x++) { @@ -89,7 +89,7 @@ struct Matrix { return result; } - Matrix operator+(Matrix other) { + Matrix operator+(const Matrix other) const { Matrix result{}; for (int i = 0; i < R * C; i++) { result.elements[i] = elements[i] + other.elements[i]; @@ -106,7 +106,7 @@ struct Matrix { } template - Matrix operator*(Matrix other) { + Matrix operator*(const Matrix other) const { Matrix result{}; for (int y = 0; y < R; y++) { for (int x = 0; x < N; x++) { @@ -121,13 +121,16 @@ struct Matrix { return result; } - Vector operator*(Vector vector) { + Vector operator*(const Vector vector) const { Matrix matrix(vector.elements); matrix = this->operator*(matrix); return { matrix.elements }; } - auto& operator()(size_t x, size_t y) { + const T& operator()(const size_t x, const size_t y) const { + return elements[y * C + x]; + } + T& operator()(const size_t x, const size_t y) { return elements[y * C + x]; } -- cgit 1.4.1