Heim > Backend-Entwicklung > C++ > Wie dreht man einen Punkt um einen anderen Punkt im 2D-Raum?

Wie dreht man einen Punkt um einen anderen Punkt im 2D-Raum?

Susan Sarandon
Freigeben: 2024-12-09 18:21:10
Original
532 Leute haben es durchsucht

How to Rotate a Point Around Another Point in 2D Space?

Rotation eines Punktes um einen anderen Punkt im 2D-Raum

Um ein Kartenspiel zu entwickeln, bei dem sich Karten auffächern, trifft eine Person aufeinander ein Dilemma bei der Bestimmung, welche Karte unter dem Cursor liegt. Dieses Dilemma erfordert eine Möglichkeit, die vier Scheitelpunkte der Karte zu drehen, um ein Polygon zur Kollisionserkennung zu bilden.

Um diese Drehung zu erleichtern, bietet die Allegro-API eine praktische Funktion:

al_draw_rotated_bitmap(OBJECT_TO_ROTATE, CENTER_X , CENTER_Y, X, Y, DEGREES_TO_ROTATE_IN_RADIANS)

Um die gedrehten Punkte jedoch manuell zu berechnen, muss eine Funktion entwickelt werden:

POINT rotation_point(float cx, float cy, float angle, POINT p)

wobei (cx, cy) den Drehpunkt darstellt, Winkel den Drehwinkel gegen den Uhrzeigersinn bezeichnet und p ist der ursprüngliche Punkt, der gedreht werden soll.

Der Kern der Lösung besteht darin, die folgenden Schritte auszuführen:

  1. Übertrage den Punkt zurück zum Ursprung, was zu p.x -= cx führt und p.y -= cy.
  2. Führen Sie die Drehung mit dem aus Gleichungen:

    • xnew = p.x * cos(winkel) - p.y * sin(winkel)
    • ynew = p.x * sin(winkel) p.y * cos(winkel)
  3. Übersetzen Sie den Punkt über p.x = xnew cx und p.y = zurück in seine ursprünglichen Koordinaten ynew cy.

Durch die Anwendung dieses Ansatzes kann die Funktion einen Punkt effektiv um jeden Drehpunkt auf einer 2D-Ebene drehen.

Das obige ist der detaillierte Inhalt vonWie dreht man einen Punkt um einen anderen Punkt im 2D-Raum?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage