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 */
EX transmatrix inverse3(const transmatrix& T) {
ld d = det(T);
ld d = det3(T);
transmatrix T2;
if(d == 0) {
inverse_error(T);
inverse_error(T);
return Id;
}
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
for(int i=0; i<3; i++)
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;
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 */
EX transmatrix inverse(const transmatrix& T) {
if(MDIM == 3)