[Gelöst] Anwendung von einer 3*2 Transformationsmatrix auf ein 2D-Objekt
-
Hallo zusammen,
ich habe hier ein geometrisches Objekt, aufgebaut aus vielen einzelnen x/y Koordinaten. Zusätzlich habe ich eine 3*2 Transformationsmatrix gegeben z.B.m11 m12 x m21 m22 y
Diese Matrix beschreibt die notwendige Transformation für das Objekt. Nun stehe ich vor der Hürde anhand dieser Matrix die neuen Koordinaten für jeden einzelnen Punkt zu berechnen. Ich kenne mich mit der Thematik leider 0 aus. Was ich rausgefunden habe ist, dass x und y reine Offsetwerte sind, und m11,m22 einer Multiplikation in X und Y entsprechen. Die letzten 2 sind wohl für Rotationen vorgesehen und beschreiben Winkel im Bogenmaß. Was ich nun nicht schaffe, ist all diese Angaben in eine Gleichung zu packen um die neuen Koordinaten zu berechnen. Addition umd Multiplikation würde ich ja noch hin kriegen, wobei sich selbst da mir die Frage stellt, in welcher Reihenfolge dies zu tun ist:
Xneu = (Xalt+x)*m11; //oder Xneu = Xalt*m11+x;
Irgendwer der mir hierbei helfen kann?
Sven
P.S. Ich sollte vielleicht erwähnen dass ich in diesem Bereich 0 Ahnung habe, und meine Mathewissen seit der mittleren Reife nicht wesentlich erweitert wurden
Wäre also froh, wenn die Antwort nicht zu mathematisch ausfällt. Ich habe alle Texte die ich im inet dazu gefunden habe nicht mal ansatzweise verstanden, weil mir wohl das nötige Grundwissen in Vektorrechnung fehlt.
-
Schau unter Matrixprodukt oder ähnlichem bei Wikipedia. Wichtig ist auch, dass man hier implizit die homogenen Koordinaten verwendet.
Auf jeden Fall ists immer "linke Zeile * rechte Spalte" (Als Skalarprodukt aufzufassen)
Also:
p'1 = m11 * p1 + m12 * p2 + x (*1)
p'2 = m21 * p1 + m22 * p2 + y (*1)Die *1 sind die homogene Erweiterung von p, und p1 bzw. p2 sind die einzelnen Koordinaten des Punktes P, der transformiert werden soll. Im Prinzip könnte die Matrix noch eine dritte Zeile haben, aber die wird scheinbar implizit zu 0 0 1 angenommen.
-
Wikipedia war zwangsweise ein Punkt, wo ich bei meiner Suche auch landete. Im Endeffekt linkt alles auf den Artikel
Matrix (Mathematik)
. Und diesen Artikel habe ich bisher noch nicht verstanden. Wie gesagt meine mathematischen Kentnisse beschränken sich auf Realschulwissen von vor ca 12 Jahren. Ebenso ging es mir eben beim nachschlagen von "homogene Koordinaten", oder "Skalarprodukt".
In wie weit schränkt diese "homegene Erweiterung" mich ein, nicht einfach zu schreiben:
p'1 = m11 * p1 + m12 * p2 + x
p'2 = m21 * p1 + m22 * p2 + y
?
Was würde dies im Ergebnis ändern?
-
Es wuerde garnichts aendern, aber durch die homogene Erweiterung kannst du Translation und Rotation in einer Matrix zusammenfassen. D.h. Rotation und Translation koennen gleich behandelt werden.
-
Darum habe ich das in Klammern geschrieben, es ist nur für die mathematische Korrektheit von Belang, wie knivil schreibt. Ich habs ja nur gut gemeint
-
Decimad schrieb:
Also:
p'1 = m11 * p1 + m12 * p2 + x (*1)
p'2 = m21 * p1 + m22 * p2 + y (*1)habe deinen Ansatz eben ausprobiert
Allerdings war das Ergebnis nicht das was ich erwartete. Was ich erwartet habe? Nun damit das ganze einen konkreteren Bezug bekommt:
Eine SVG-Datei, die mit Inkscape erstellt wurde enthält diese Transformationen an einigen Stellen. Ich muss für einen Parser diese Transformationen entfernen und die Objekte passend skalieren. Nach der obigen Methode werden allerdings die Objekte anders transformiert, wie wenn ich ein solche Transformation unter Inkscape direkt einleite. Will ja nicht ausschließen dass es verschiedene Interpretationsmodelle dieser Matrix gibt, aber ich dachte diese wäre im mathematischen Sinne immer gleich.
-
Kannst du evtl. mal Bilder von den zwei Situationen zeigen? Vielleicht kann man da ja was erkennen. Eigentlich ist das eindeutig... Es sei denn SVG arbeitet mit Reihenvektoren oder so?
PS: http://www.w3.org/TR/SVG11/coords.html#TransformMatrixDefined Also für mich sieht das so aus, als ob da oben genau das richtige steht. Evtl. hast du a-f nicht richtig zugeordnet?
x'1 = a * x1 + b * x2 + c
x'2 = d * x1 + e * x2 + f
-
Ich nehme alles zurück
Hatte soeben eine Grafik erstellt, wo ich alle 3 Objekte (Original, Meine Berechnung, und nach SVG (z.B. Inkscape) dargestellt werden. Dabei viel mir dann selber auf, dass ich mich an ein paar Punkten schlicht und einfach verrechnet habe. Werte korrigiert, und nun passt alles.
Großes dankeschönbtw müsste doch
x'1 = a * x1 + b * x2 + e x'2 = c * x1 + d * x2 + f
heissen, oder?
-
Ahh klar, ich hatte das Dokument nur schnell überflogen, du hast natürlich recht