Ich verwende eine affine Transformationsmatrix, um 2D-Koordinaten vom Bildschirm (Größe 10e3) in kleine Teile fraktaler Mengen (Größe nur 10e-15) zu transformieren.
Ich muss auch umgekehrt abbilden, also invertiere ich einfach die Matrix. Es funktioniert, wenn die Größen nicht zu weit voneinander entfernt sind, aber es schlägt fehl, wenn die Determinante zu nahe an Null kommt, um mit Standarddoppelzahlen dargestellt zu werden.
Die Matrizen, die ich benutze, haben folgende Form:
a c e
b d f
0 0 1
Und der Inversionsalgorithmus, den ich habe, ist:
var dt = a * d - b * c;
return new Matrix(d/dt, -b/dt, -c/dt, a/dt, (c * f - d * e) / dt, -(a * f - b * e) / dt);
Gibt es eine alternative Möglichkeit, die Matrix zu invertieren? Ich bin nicht sehr gut in Mathematik, daher würde ich eine einfache Lösung benötigen und eine, für die ich den Code oder einen Algorithmus finden könnte.
Ein Beispiel für eine solche Matrix:
3.26091378894248e-9 -1.882689453850103e-9 -0.7172216437740687
-1.882689453814925e-9 -3.2609137888815494e-9 -0.23371832131832268
0 0 1