Nehmen Sie ein Bild I der Dimension (2, 2). Grafische Koordinaten C sind gegeben als:Drehen Sie ein Bild um seine Mitte auf einer GPU
C = [[0, 0], [1, 0],
[0, 1], [1, 1]]
Ziel: drehe ich um 90 Grad um die Mitte (den Ursprung).
Transformation Matrix:
TRotate (90) = [[0, 1], [1, 0]]
(Angenommen jedes Koordinatenpaar in Lockstep-transformiert werden kann (dh auf eine GPU))
Methode:.
- Conv Geben Sie grafische Koordinaten in mathematische Koordinaten mit dem Ursprung als Bildmitte ein.
- Wenden Sie die Transformationsmatrix an.
- Zurück in grafische Koordinaten konvertieren.
Eg:
zur graphischen Koordinaten Konvertieren:
tx '= tx - Breite/2
ty' = ty - Breite/2
C' =[[-1, -1], [0, -1],
[-1, 0], [0, 0]]
Wenden Sie die Transformationsmatrix an:
C" = [[-1, 1], [-1, -0],
[0, 1], [0, 0]]
Konvertieren zurück:
C" = [[0, 2], [0, 1],
[1, 2], [1, 1]]
die Umwandlung zurück außerhalb der Grenzen ist ...
Ich bin wirklich eine richtige Rotation zu bekommen über einen ‚Schwerpunkt‘ Arbeits kämpfen. Ich denke, dass meine Konvertierung in 'mathematische Koordinaten falsch ist'.
hatte ich mehr Glück durch eher die Koordinaten in die folgende Umwandlung:
C' =[[-1, -1], [1, -1],
[-1, 1], [1, 1]]
I diese Umwandlung erreicht, indem das Beobachten, ob der Ursprung zwischen den vier Pixeln existiert in mit der + Y-Achse ve nach unten gerichtet , und die + ve x-Achse nach rechts, dann wäre der Punkt (0,0) (-1, -1) usw. für den Rest. (Die resultierende Rotation und Umwandlung ergibt das gewünschte Ergebnis).
Jedoch kann ich nicht finden die richtige Art von Transformation auf die Koordinaten anwenden, um den Ursprung in der Mitte zu platzieren. Ich habe eine Transformationsmatrix mit homogenen Koordinaten ausprobiert, aber das funktioniert nicht.
bearbeiten
Malcolm Rat:
Positionsvektor =
[0
0
1]
Übersetzen von Breite Subtrahieren/2 == 1:
[-1
-1
0]
Drehen durch die Multiplikation Transformationsmatrix:
|-1| | 0 1 0| |-1|
|-1| X |-1 0 0| = | 1|
|0 | | 0 0 1| | 0|
Hallo Malcom. Meinst du eine zusätzliche Zeile im Positionsvektor so [x, y, w], mit w = 1? Und meinst du eine zusätzliche Spalte und Zeile zur Transformationsmatrix? – user1658296
Sie können sich Ihren Punkt in Spalten oder Zeilen vorstellen. Wenn Sie ihn also als [x y w] zeichnen, hat er Spalten. Wenn Sie ihn vertikal zeichnen, hat er Zeilen. Es spielt keine Rolle, solange die Matrix das umgekehrte Format verwendet (Zeilen stimmen mit Spalten überein und umgekehrt). Es kann jedoch leichter verständlich machen, ob die Matrix quadratisch ist. –
Danke, Malcolm, das Ergebnis ist jedoch schwer in grafische Koordinaten zu übersetzen. [-1, 1, 0] sollte der Punkt [0, 1] in grafischen Koordinaten sein. – user1658296