mirror of
https://github.com/guezoloic/t3dsr.git
synced 2026-01-25 10:34:23 +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 mat3Mul(Mat3 m1, Mat3 m2);
|
||||||
Mat3 mat3Tpo(Mat3 m);
|
Mat3 mat3Tpo(Mat3 m);
|
||||||
float mat3Det(Mat3 m);
|
float mat3Det(Mat3 m);
|
||||||
|
Mat3 mat3Inv(Mat3 m);
|
||||||
|
|
||||||
#endif // MATRIX_H
|
#endif // MATRIX_H
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
#include "math/matrix3.h"
|
#include "math/matrix3.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
Mat3 mat3(float arr[9]) {
|
Mat3 mat3(float arr[9]) {
|
||||||
Mat3 mat;
|
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]) -
|
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[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]);
|
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