Einfachste Weg, um ein Rechteck drehen
Ich bin mit Rechtecken definiert, in Bezug auf die x-y-Koordinaten und deren Breite und Höhe. Ich fand heraus, wie Sie zu drehen in Bezug auf die Koordinaten ( x = cos(deg) * x - sin(deg) * y
y = sin(deg) * x + cos(deg) * y
), aber ich bin stecken geblieben auf der Höhe und Breite. Ich bin sicher, es gibt eine offensichtliche Lösung, die mir fehlt. Wenn es darauf ankommt, bin ich mit Python.
Bearbeiten Sorry für die verwirrende Beschreibung. Meine Absicht ist es, die Breite und Höhe entweder storniert oder annulliert wegen was auch immer den Winkel. Zum Beispiel, in einem 90-Grad-Drehung, die Werte wechseln würde. In einer 180-Grad-Drehung, Breite negativ wäre. Auch, ich nur benutzen wollen um Vielfache von 90 in meinem Skript. Ich könnte verwenden Sie einfach if
Aussagen, aber ich davon ausgegangen, es wäre eine "elegante" Methode.
- Was meinst du mit "stuck on Höhe und Breite"? Was über die Höhe und die Breite? Meinst du den minimalen bzw. maximalen X-und Y-Koordinaten? Das drehen eines Rechtecks nicht ändert seine Abmessungen, so dass Sie wahrscheinlich nicht gemeint.
- Seien Sie vorsichtig - Sie halten mit "deg" in Ihre Sinus-und Cosinus-Funktionen, aber die Nummer, die Sie übergeben werden muss Bogenmaß. 180 ° = pi Rad, wo pi = 3.14159....
- lässt mich zu dem Schluss kommen, dass die syntax und die Art und Weise-Grad-feed zu trigonometrischen Funktionen intead von Bogenmaß lässt es so Aussehen, wie er mit Python. Gut, ich war auf der Suche um dies zu implementieren in Python 🙂
- Nein, jede Sprache, die ich wissen verwendet Bogenmaß für trigonometrische Funktionen. Enthält Python.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Art und Weise, die Sie beschreiben, nur drehen um 90 Grad, und die Art und Weise Sie scheinen zu sein, definieren Breite und Höhe, suchst du vielleicht so etwas wie
Nicht sicher, warum Sie wollen, um negative Werte für Breite und Höhe, obwohl .. weil sonst jeder 90-Grad-Drehung, effektiv swaps Breite und Höhe, unabhängig davon, welchen Weg Sie drehen.
Rechnen Sie einfach aus, vier Ecken des Rechtecks:
und drehen Sie jeden Winkel Sie wollen:
und verwandeln Sie zurück zu Ihrem Rechteck-Darstellung:
wo
dist
berechnet die Entfernung zwischen zwei Punkten.Edit: Warum versuchen Sie nicht, gelten die Formel, die Sie geschrieben haben, zu
(width, height)
- pair-Mädchen?Es ist leicht zu sehen, dass, wenn
deg == 90
die Werte wechseln:und wenn
deg == 180
Sie negiert:und so weiter... ich denke, das ist, was Sie suchen.
Edit2:
Hier kommt schnelle rotation-Funktion:
Der richtige Weg wäre, zu greifen, um die transformation von Matrizen. Auch, ausgehend von deiner Frage vermute ich, das Sie drehen möchten, mit Bezug auf (x=0,y=0), aber wenn nicht, müssen Sie dies berücksichtigen und übersetzen Sie Ihre Rechteck auf die Mitte des plans (und dann übersetze es zurück, wenn die rotation durchgeführt wird).
M = Matrix zu übersetzen, um die Mitte
R = Rotationsmatrix
Transformation Matrix = M^(-1) * R * M
Aber geben Sie eine einfache Antwort auf Ihre Frage, nehmen Sie einfach die beiden anderen Ecken des Rechtecks und die gleiche transformation auf Sie.
Erfahren Sie mehr über Transformationsmatrizen :
http://en.wikipedia.org/wiki/Transformation_matrix
Rotation nicht ändern sollte
width
undheight
. Deine Gleichung ist richtig, wenn Sie drehen möchten, (x,y) um (0,0) durchdeg
, aber beachten Sie, dass oftcos
undsin
Funktionen erwarten Argumente im Bogenmaß statt Grad, so müssen Sie möglicherweise multiplizieren Siedeg
durchpi/180
(Radianten pro Grad).Wenn Sie brauchen, um zu finden Sie die Orte von anderen Rechteck Eckpunkte neben (x,y) nach Drehung, dann sollten Sie entweder speichern und drehen Sie Sie zusammen mit (x,y) oder halten Sie einige Informationen über das Rechteck Orientierung (wie Grad), so können Sie berechnen Ihnen, wie z.B. x+Breitecos(deg), y+Höhesin(deg).