Wie transformiere ich 2D-Koordinaten mithilfe einer 3x3 Matrix



  • Wie der Titel bereits erklärt will ich Punkte in einem 2D-Koordinatensystem transformieren. Zusätzlich erweitere ich die Punkte um eine dritte Variable um eine Translation mithilfe einer Multiplikation beschreiben kann.
    Daraus ergibt sich folgende "Formel":

    P'      =        A        x      P
    _      _      __         __     __     __
    | x_alt |     |  a  b  c  |     | x_neu |
    | y_alt |  =  |  b  d  f  |  x  | y_neu |
    |_  1  _|     |_ 0  0  1 _|     |_  1  _|
    

    (Ich hoffe, ich hab's richtig geschrieben)

    Ich will nun P berechnen. P' und A sind bekannt und die Zeilenvektoren von A sind nicht linear abhängig.

    Meine Überlegung bisher: Ich bilde die inverse Matrix von A und multipliziere diese mit P'.
    (Die inverse Matrix wollte ich dem Vertexshader übergeben. Stichwort OpenGL)

    Ich hab jetzt aber des öfteren gelesen, dass man in der Regel die inverse Matrix nicht berechnet.
    Was wäre also eine effektive Methode um P zu berechnen?
    Sollte möglichst die Leistung der Grafikkarte nutzen.



  • Du hast da ein LGS der Form "A*x=b" mit A=A, b=P' und x=P. Alles was du tun musst, ist dieses LGS irgendwie lösen, da gibt es sicher Funktionen.

    Gauss ist im Gegensatz zum Matrix invertieren (so gut wie) numerisch stabil, d.h. die Ergebnisse werden genauer und es sollte sogar noch etwas schneller sein.



  • In dem Fall kann man die Formeln sogar hardcoden.

    Mein CAS sagt:

    x_{neu} = \frac{ce - bf - ex_{alt} + by_{alt}}{bd - ae}\\ y_{neu} = \frac{af-cd+dx_{alt}-ay_{alt}}{bd - ae}


  • Da ist doch gar kein e in der Matrix?


Anmelden zum Antworten