0 Daumen
498 Aufrufe

Aufgabe:(0,0),(2,0),(1,3)

Hier werden die Punkte in eine Matrix \( \left(\begin{array}{ccc}0 & 2 & 1 \\ 0 & 0 & 3\end{array}\right) \) geschrieben, diese wird um eine Dimension erweitert auf \( \left(\begin{array}{lll}0 & 2 & 1 \\ 0 & 0 & 3 \\ 1 & 1 & 1\end{array}\right) \) und dann werden die Operatoren auf die Matrix angewendet, wodurch das gesamte Objekt gedreht, verschoben, skaliert wird.

Beispiel 4.4. Im Bild sieht man das Schiff, welches skaliert, verschoben und gedreht wird:
a.)Skalierung von 0.7 und 3
b.)Verschiebung um 6 und -4
c.)Rotation um den Mittelpunkt: 90 grad


Problem/Ansatz: wir kann ich die Skalierung/ Verschiebung/ Rotation berechnen?

Avatar von

1 Antwort

+1 Daumen

Hallo Lukas,

das was Du da beschreibst sind sogenannte homogene Kordinaten. Der Trick besteht darin, durch das Hinzufügen einer weiteren Dimension aus einer affinen Abbildung (z.B. der Verschiebung) eine lineare Abbildung zu machen.

Die Matrizen \(S\), \(T\) und \(R\) mit der man die drei Operationen Skalieren, Verschieben und Rotieren ausführen kann, sehen dann so aus:$$S = \begin{pmatrix} s_x & 0& 0\\ 0 & s_y& 0\\ 0&0&1\end{pmatrix}\\ T = \begin{pmatrix} 1 & 0& p_x \\ 0 & 1& p_y\\ 0&0&1\end{pmatrix}\\ R = \begin{pmatrix}  \cos\alpha & -\sin\alpha& 0 \\ \sin\alpha & \cos\alpha& 0 \\ 0& 0& 1\end{pmatrix}$$\(\alpha\) ist der Winkel um den gedreht wird, \(s_{x,y}\) sind die Faktoren mit denen die Figur in \(x\) und \(y\)-Richtung skaliert wird. und \((p_x|\,p_y)\) ist der Vektor, um den das ganze verschoben wird.

Die Anwendung ist immer eine Multiplikation Matrix mal Vektor(en). Und das Ergebnis ist dann der bzw. die neuen Vektoren bzw. Positionen. In Deinem Beispiel sähe es dann so aus, wenn man die Operationen in der Reihenfolge a-b-c hinter einander ausführt:

blob.png

und die Operation zu einer Matrix zusammen gefasst ist:$$R(90°)\cdot T(6|\,-4)\cdot S(0,7|\,3) =\begin{pmatrix}0& -3& 4\\ 0,7& 0& 6\\ 0& 0& 1\end{pmatrix}$$achte darauf, dass die Operationen bei der Multiplikation von rechts nach links ausgeführt werden.

Avatar von 48 k

Danke für die schnelle Antwort,

Bei diesem konkreten Beispiel jetzt mit der Skalierung von 0.7 und 4, wie erhalte ich dann genau das s_x und s_y? Soll ich hier multiplizieren?

... mit der Skalierung von 0.7 und 4, wie erhalte ich dann genau das s_x und s_y

Die hast doch selbst gegeben! \(s_x=0,7\) und \(s_y=4\)

Hm,

nach dem man das Schiff kalt verformt und rumgeschoben hat, wird es wohl nicht so einfach im Ursprung liegen um mit der Matrix gedreht zu werden?

Das Original ABC liegt doch im Ursprung. A'B'C' ist das verformte, verschobene und gedrehte Dreieck. Werner-Salomon hat das doch auch rechnerisch sehr gut vorgemacht.

Ich war auf den Mittelpunkt des Bildes fixiert. Der Aufgabentext bezieht sich auf das Bild.

Stimmt, so isses einfacher - drehe un KO-ursprung

- dann machen aber homogene KO ehr mehr Arbeit als sie nutzen....

- dann machen aber homogene KO ehr mehr Arbeit als sie nutzen....

:-)) ich kann Dir garantieren, dass der Einsatz von homogenen Koordinaten die Arbeit erleichtert. Ich habe beruflich damit zu tun. Es lohnt sich definitiv!

Grundsätzlich klar und richtig, ich dachte jetzt aus der Sicht des geplagten Fragenstellers ;-)

dann liefere ich mal meine Alternative, falls sie zutreffen sollte

M:((6, -4)+ (37 / 5, -4)+ (67 / 10, 5))/3

P_R:=T(M) R(90°) T(-M) P''

\(\small P_R \, :=  \, \left(\begin{array}{rrr}\frac{97}{10}&\frac{97}{10}&\frac{7}{10}\\\frac{-17}{10}&\frac{-3}{10}&-1\\1&1&1\\\end{array}\right)\)

blob.png  

P_R:=T(M) R(90°) T(-M) P'

Ja - genauso!

Eine Drehung um eine (Mittel-)Punkt (der zu definieren wäre!) geschieht durch eine Verschiebung diese Punktes in den Ursprung, die eigentliche Drehung und die Verschiebung zurück.

In homogenen Koordinaten ist eine Rotation um einen Punkt \(\vec m\) und um den Winkel \(\alpha\)$$R(\vec m,\alpha)=\begin{pmatrix} \underline 1 & \vec m \\ 0 & 1 \end{pmatrix}\begin{pmatrix} \underline R(\alpha) & \vec 0 \\ 0 & 1 \end{pmatrix}\begin{pmatrix} \underline 1 & -\vec m \\ 0 & 1 \end{pmatrix}\\ \phantom{R(\vec m,\alpha)}=\begin{pmatrix} \underline R(\alpha) & (\underline 1 - \underline R(\alpha))\vec m \\ 0 & 1 \end{pmatrix}$$und hier in diesem konkreten Fall wäre (aus der Grundstellung heraus)$$\underline R(90°)= \begin{pmatrix}0& -1\\ 1& 0\end{pmatrix}, \quad \vec m = \begin{pmatrix}1\\ 1\end{pmatrix} \\\implies R\left(\begin{pmatrix}1\\ 1\end{pmatrix},\,90°\right) =\begin{pmatrix}0& -1& 2\\ 1& 0& 0\\ 0& 0& 1\end{pmatrix}$$

Wenn der Fragesteller schreibt:

c.) Rotation um den Mittelpunkt: 90 grad

ist zunächst mal offen, ob damit der Mittelpunkt des Bildes (der Usprung?) oder der des 'Schiffes' gemeint ist. Aus der Fragestellung geht auch nicht hervor, ob die drei Transformationen gemeinsam oder getrennt durchgeführt werden sollen.

Wenn Lukas den Mittelpunkt des Schiffes meint, sollte er das scheiben.

Btw.: auch bei der Skalierung ist es nicht egal wo das Schiff steht. Auch hier müsste man einen Bezugspunkt angeben. Eine Skalierung bezogen auf den Mittelpunkt des Schiffes resultiert in unterschiedlichen Koordinaten, wie eine solche 'nackte' Skalierung bezogen auf den Ursprung.

Nur die Verschiebung ist von keinem Bezugspunkt abhängig.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community