From 28eb4cbfc35613b4e9cac0e4e6749f1f2460031e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20GUEZO?= Date: Mon, 31 Mar 2025 15:18:41 +0200 Subject: [PATCH] feat(matrix3): add inv function. --- include/math/matrix3.h | 1 + src/math/matrix3.c | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/include/math/matrix3.h b/include/math/matrix3.h index 378d869..ba128dc 100644 --- a/include/math/matrix3.h +++ b/include/math/matrix3.h @@ -15,5 +15,6 @@ Mat3 mat3Scl(Mat3 m, float scalar); Mat3 mat3Mul(Mat3 m1, Mat3 m2); Mat3 mat3Tpo(Mat3 m); float mat3Det(Mat3 m); +Mat3 mat3Inv(Mat3 m); #endif // MATRIX_H \ No newline at end of file diff --git a/src/math/matrix3.c b/src/math/matrix3.c index ea6e286..61bfe0f 100644 --- a/src/math/matrix3.c +++ b/src/math/matrix3.c @@ -1,6 +1,5 @@ #include "math/matrix3.h" #include -#include Mat3 mat3(float arr[9]) { Mat3 mat; @@ -87,4 +86,25 @@ float mat3Det(Mat3 m) { return m.m[0] * (m.m[4] * m.m[8] - m.m[5] * m.m[7]) - m.m[1] * (m.m[3] * m.m[8] - m.m[5] * m.m[6]) + m.m[2] * (m.m[3] * m.m[7] - m.m[4] * m.m[6]); +} + +Mat3 mat3Inv(Mat3 m) { + Mat3 inv; + float det = mat3Det(m); + if (det == 0) return mat3Ity(); + + float invDet = 1.0f / det; + + // ??? + inv.m[0] = (m.m[4] * m.m[8] - m.m[5] * m.m[7]) * invDet; + inv.m[1] = -(m.m[1] * m.m[8] - m.m[2] * m.m[7]) * invDet; + inv.m[2] = (m.m[1] * m.m[5] - m.m[2] * m.m[4]) * invDet; + inv.m[3] = -(m.m[3] * m.m[8] - m.m[5] * m.m[6]) * invDet; + inv.m[4] = (m.m[0] * m.m[8] - m.m[2] * m.m[6]) * invDet; + inv.m[5] = -(m.m[0] * m.m[5] - m.m[2] * m.m[3]) * invDet; + inv.m[6] = (m.m[3] * m.m[7] - m.m[4] * m.m[6]) * invDet; + inv.m[7] = -(m.m[0] * m.m[7] - m.m[1] * m.m[6]) * invDet; + inv.m[8] = (m.m[0] * m.m[4] - m.m[1] * m.m[3]) * invDet; + + return inv; } \ No newline at end of file