Graphics2D - Rotierende Formen, auf ein Graphics2D-Objekt
Ich habe eine Graphics2D
Objekt, das ich verwenden, um zu zeichnen auf meinem Canvas
. Ich zeichne mehrere Formen auf der Canvas
und verändern wollen, nur einer (oder ein Teil) von Ihnen.
Ich werde versuchen, es einfach halten:
void render(Graphics2D g) {
... //Draw shape 1
... //Draw shape 2
... //Draw shape 3
}
Wie würde ich mich über rotierende Form 2, wobei die Form 1 und 3 intakt? Durch "drehen" meine ich drehen um seinen Mittelpunkt, die wir definieren können als x
und y
zum Beispiel.
Ich habe auf der Suche nach einem Weg, dies zu tun für eine Weile, aber konnte nichts finden, die so arbeitet wie ich es mir vorstelle.
Gibt es eine einfache Möglichkeit, dies zu tun?
- "konnte nichts finden, die funktioniert, wie ich will, es zu" Können Sie eine SSCCE von Ihrem besten Versuch? Beschreiben Sie, in welcher Weise die Transformation nicht Ihren Erwartungen entsprechen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstatt drehen Sie die Form um es den Mittelpunkt drehen, und dann übersetzen die Leinwand. Zum drehen um den Mittelpunkt der Form an
(x, y)
zuerst übersetzen Sie die Leinwand, indem(-x, -y)
und dann drehen Sie die Leinwand-d
Grad und ziehen Sie die Form als normal an (0,0).Wenn du fertig bist, wieder zurück drehen, dann übersetzen Sie zurück (beachten Sie, dass mit dieser geometrischen Transformationen die Reihenfolge ist wichtig, es zu übersetzen und dann dreht Ihnen ein völlig anderes Ergebnis).
Dies bedeutet, dass Sie immer noch zeichnen Sie ein Objekt an jeder Drehung, ohne dass eine Neuberechnung der Koordinaten selbst.
g.translate(x, y)
2)g.rotate(d)
3) zeichnen Sie die Form mit center (0, 0) 4)g.rotate(-d)
5)g.translate(-x, -y)
. Dies funktioniert genau so, wie ich will. Danke.-d
Bogenmaß, richtig?Um zu drehen eine Form, verwenden Sie eine der
Graphics2D.rotate
Methoden.Cache der Transformation, sowohl für
shape 1
undshape 3
. Vor dem auftragenshape 3
sicher, dass Sie nach dem zurücksetzen der Transformation den zwischengespeicherten, da mitrotate
fürshape 2
verändern die aktuellen Koordinaten umrechnen.Schritte:
shape 1
shape 2
shape 3
s
ist meine wrapper-Klasse für java.das awt.Form und hat einige Sachen mit ihm.... Aber was Sie wollen, ist in Zeile 2.afx.rotate(
Winkel,
xAnchorPoint,yAnchorPoint);
afx.drehen dreht das Objekt um den Punkt (xAnchorPoint;yAnchorPoint).
Hoffe, das ist es, was Sie wollte