mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-19 20:40:10 +00:00
inverse2
This commit is contained in:
parent
0f6493b912
commit
7d0194d7f6
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user