From 45dc3049e7055f254457d97737271673f46282e0 Mon Sep 17 00:00:00 2001 From: NADAL Jean-Baptiste Date: Fri, 2 Feb 2024 17:50:54 +0100 Subject: [PATCH] [FEAT] Matrix : add minor --- raytracing/src/matrix.cpp | 7 +++++++ raytracing/src/matrix.h | 1 + tests/03_matrix.cpp | 17 +++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/raytracing/src/matrix.cpp b/raytracing/src/matrix.cpp index e1fbfa0..dee8ec8 100644 --- a/raytracing/src/matrix.cpp +++ b/raytracing/src/matrix.cpp @@ -226,6 +226,13 @@ Matrix Matrix::sub_matrix(uint8_t a_rows, uint8_t a_cols) /* ------------------------------------------------------------------------- */ +double Matrix::minor(uint8_t a_rows, uint8_t a_cols) +{ + return sub_matrix(a_rows, a_cols).determinant(); +} + +/* ------------------------------------------------------------------------- */ + Matrix Matrix::identity(void) { Matrix the_identity = { diff --git a/raytracing/src/matrix.h b/raytracing/src/matrix.h index 1754eb3..bdd946f 100644 --- a/raytracing/src/matrix.h +++ b/raytracing/src/matrix.h @@ -62,6 +62,7 @@ namespace Raytracer bool transpose(void); double determinant(void); Matrix sub_matrix(uint8_t a_rows, uint8_t a_cols); + double minor(uint8_t a_rows, uint8_t a_cols); static Matrix identity(void); diff --git a/tests/03_matrix.cpp b/tests/03_matrix.cpp index c8f5a9f..bae341b 100644 --- a/tests/03_matrix.cpp +++ b/tests/03_matrix.cpp @@ -277,3 +277,20 @@ TEST_CASE("[Matrix] A submatrix of a 4x4 matrix is a 3x3 matrix", "[Matrix]") REQUIRE(a.sub_matrix(2, 1) == b); } + +/* ------------------------------------------------------------------------- */ + +TEST_CASE("[Matrix] Calculating a minor of a 3x3 matrix", "[Matrix]") +{ + Matrix a = { + {3, 5, 0}, + {2, -1, -7}, + {6, -1, 5} + }; + + Matrix b = a.sub_matrix(1, 0); + + REQUIRE(b.determinant() == 25); + + REQUIRE(a.minor(1, 0) == 25); +}