1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-10-18 06:30:41 +00:00
This commit is contained in:
Zeno Rogue 2024-10-05 10:03:13 +02:00
parent 0f6493b912
commit 7d0194d7f6

View File

@ -1108,19 +1108,35 @@ void inverse_error(const transmatrix& T) {
/** inverse of a 3x3 matrix */ /** inverse of a 3x3 matrix */
EX transmatrix inverse3(const transmatrix& T) { EX transmatrix inverse3(const transmatrix& T) {
ld d = det(T); ld d = det3(T);
transmatrix T2; transmatrix T2;
if(d == 0) { if(d == 0) {
inverse_error(T); inverse_error(T);
return Id; return Id;
} }
for(int i=0; i<3; i++) for(int i=0; i<3; i++)
for(int j=0; j<3; j++) for(int j=0; j<3; j++)
T2[j][i] = (T[(i+1)%3][(j+1)%3] * T[(i+2)%3][(j+2)%3] - T[(i+1)%3][(j+2)%3] * T[(i+2)%3][(j+1)%3]) / d; T2[j][i] = (T[(i+1)%3][(j+1)%3] * T[(i+2)%3][(j+2)%3] - T[(i+1)%3][(j+2)%3] * T[(i+2)%3][(j+1)%3]) / d;
return T2; return T2;
} }
/** inverse of a 2x2 matrix */
EX transmatrix inverse2(const transmatrix& T) {
ld d = det2(T);
if(d == 0) {
inverse_error(T);
return Id;
}
transmatrix T2 = Id;
T2[0][0] = T[1][1] / d;
T2[1][1] = T[0][0] / d;
T2[0][1] = -T[0][1] / d;
T2[1][0] = -T[1][0] / d;
return T2;
}
/** \brief inverse of a general matrix */ /** \brief inverse of a general matrix */
EX transmatrix inverse(const transmatrix& T) { EX transmatrix inverse(const transmatrix& T) {
if(MDIM == 3) if(MDIM == 3)