Rotation und Translation

17/10/2015 - 18:13 von Hans-Peter Diettrich | Report spam
Es geht wieder einmal um Puzzle-Teile, diesmal ums Zusammensetzen.

Gegeben sind zwei gleich lange Vektoren (durch je 2 Punkte), und der
zweite Vektor soll (samt den restlichen Pixeln der Kontur) auf den
ersten verschoben werden. Mit homogenen Koordinaten soll das ja in einem
Rutsch (Matrixmultiplikation) gehen. Nun bereitet mir aber die
Konstruktion dieser Matrix Probleme.

Wenn zuerst die Rotation ausgeführt wird, àndern sich ja die Koordinaten
der gedrehten Punkte, so daß mir nicht klar ist, welche Distanz für die
Translation anzusetzen ist.

Zu Fuß würde ich daher zuerst eine Translation eines Eckpunkts
(Anfangspunkt des zweiten Vektors) in den Ursprung des
Koordinatensystems vornehmen, dann die Rotation um den Ursprung, wonach
der Eckpunkt immer noch im Ursprung liegt, und dann noch eine
Translation in den Startpunkt des Zielvektors. Damit wàren zumindest die
Parameter (Matrizen...) der Translationen einfach zu berechnen. Aber wie
bekomme ich die Parameter für die Rotation?

Intuitiv würde ich davon ausgehen, daß der Endpunkt des rotierten
Vektors an einer definierten Position (entsprechend Endpunkt des
Zielvektors) liegen muß. Daraus müßten sich dann doch die Werte von
sin(phi) und cos(phi) berechnen lassen?

Leider bekomme ich die Formeln von Hand nicht richtig hin, irgendwo
rutschen mir Fehler in der Indizierung und den Vorzeichen rein. Kann mir
da jemand unter die Arme greifen?

TIA
DoDi
 

Lesen sie die antworten

#1 Christian Gollwitzer
17/10/2015 - 18:46 | Warnen spam
Am 17.10.15 um 18:13 schrieb Hans-Peter Diettrich:
Intuitiv würde ich davon ausgehen, daß der Endpunkt des rotierten
Vektors an einer definierten Position (entsprechend Endpunkt des
Zielvektors) liegen muß. Daraus müßten sich dann doch die Werte von
sin(phi) und cos(phi) berechnen lassen?

Leider bekomme ich die Formeln von Hand nicht richtig hin, irgendwo
rutschen mir Fehler in der Indizierung und den Vorzeichen rein. Kann mir
da jemand unter die Arme greifen?




Naja, der cos(phi) ergibt sich aus dem Skalarprodukt. Wenn Du die
Ursprungsvektoren a und b aufeinander rotieren willst, dann sei

cphi := a*b/(|a| *|b|)

und die Matrix lautet

( cphi sphi
-sphi cphi )

wobei sphi=sqrt(1-cphi^2)

Dummerweise ist die Wurzel nciht eindeutig; je nach Lage der Vektoren
rotiert die Matrix manchmal a nach b oder b nach a. Die Richtung kann
man aber aus dem Kreuzprodukt bekommen, denn

a_x*b_y-a_y*b_x

hat das gleiche Vorzeichen wie sin(phi).

Christian

Ähnliche fragen