From 89c619f83ed744de68f49d815c834cfd432fa502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20GUEZO?= Date: Sun, 30 Mar 2025 16:11:23 +0200 Subject: [PATCH] feat(matrix3): Initialize few basic functions --- include/math/matrix3.h | 19 +++++++++ src/main.c | 4 +- src/math/matrix3.c | 90 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 include/math/matrix3.h create mode 100644 src/math/matrix3.c diff --git a/include/math/matrix3.h b/include/math/matrix3.h new file mode 100644 index 0000000..378d869 --- /dev/null +++ b/include/math/matrix3.h @@ -0,0 +1,19 @@ +#ifndef MATRIX_H +#define MATRIX_H + +typedef struct { + float m[9]; +} Mat3; + +Mat3 mat3(float arr[9]); +Mat3 mat3Zro(); +Mat3 mat3Ity(); + +Mat3 mat3Add(Mat3 m1, Mat3 m2); +Mat3 mat3Sub(Mat3 m1, Mat3 m2); +Mat3 mat3Scl(Mat3 m, float scalar); +Mat3 mat3Mul(Mat3 m1, Mat3 m2); +Mat3 mat3Tpo(Mat3 m); +float mat3Det(Mat3 m); + +#endif // MATRIX_H \ No newline at end of file diff --git a/src/main.c b/src/main.c index 5efdfb3..e9cdae1 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,3 @@ -#include - int main() { - return EXIT_FAILURE; + return 0; } \ No newline at end of file diff --git a/src/math/matrix3.c b/src/math/matrix3.c new file mode 100644 index 0000000..ea6e286 --- /dev/null +++ b/src/math/matrix3.c @@ -0,0 +1,90 @@ +#include "math/matrix3.h" +#include +#include + +Mat3 mat3(float arr[9]) { + Mat3 mat; + memcpy(mat.m, arr, 9*sizeof(float)); + return mat; +} + +Mat3 mat3Zro() { + return (Mat3){0}; +} + +Mat3 mat3Ity() { + return (Mat3) {{ + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + }}; +} + +Mat3 mat3Add(Mat3 m1, Mat3 m2) { + Mat3 mat; + + for(int i = 0; i<9; i++) { + mat.m[i] = m1.m[i] + m2.m[i]; + } + + return mat; +} + +Mat3 mat3Sub(Mat3 m1, Mat3 m2) { + Mat3 mat; + + for(int i = 0; i<9; i++) { + mat.m[i] = m1.m[i] - m2.m[i]; + } + + return mat; +} + +Mat3 mat3Scl(Mat3 m, float scalar) { + Mat3 mat; + + for(int i = 0; i<9; i++) { + mat.m[i] = m.m[i] * scalar; + } + + return mat; +} + +Mat3 mat3Mul(Mat3 m1, Mat3 m2) { + Mat3 mat; + + for(int i = 0; i<3; i++) { + int i3 = i * 3; + for (int j = 0; j < 3; j++) { + float sum = 0; + + for (int k = 0; k < 3; k++) { + sum += m1.m[i3 + k] * m2.m[k*3 + j]; + } + + mat.m[i3 + j] = sum; + } + } + + return mat; +} + +Mat3 mat3Tpo(Mat3 m) { + Mat3 mat; + + for(int i = 0; i<3; i++) { + int i3 = i * 3; + + for (int j = 0; j < 3; j++) { + mat.m[i3 + j] = m.m[j*3 + i]; + } + } + + return mat; +} + +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]); +} \ No newline at end of file