mirror of
https://github.com/guezoloic/t3dsr.git
synced 2026-01-25 09:34:24 +00:00
feat(matrix3): add inv function.
This commit is contained in:
@@ -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
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "math/matrix3.h"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user