Einen Punkt um einen anderen Punkt in zwei Dimensionen drehen
Dieser Artikel befasst sich mit der Herausforderung, die Drehung eines Punkts um einen anderen Punkt in zwei Dimensionen zu berechnen Abmessungen. Die Aufgabe entsteht bei der Entwicklung eines Kartenspiels, bei dem Karten aufgefächert werden. Die al_draw_rotated_bitmap-Funktion der Allegro API erleichtert das einfache Auffächern von Karten, behindert jedoch die Mausinteraktion, indem sie die darunter liegenden Karten verdeckt. Um dieses Problem anzugehen, wird ein Polygonkollisionstest vorgeschlagen, der die Drehung der vier Punkte der Karte erfordert.
Die Lösung liegt in der Verwendung einer Rotationsfunktion, die die folgenden Operationen ausführt:
Diese Funktion, rotation_point, wird wie folgt implementiert:
POINT rotate_point(float cx, float cy, float angleInRads, POINT p) { float s = sin(angleInRads); float c = cos(angleInRads); // translate point back to origin: p.x -= cx; p.y -= cy; // rotate point float xnew = p.x * c - p.y * s; float ynew = p.x * s + p.y * c; // translate point back: p.x = xnew + cx; p.y = ynew + cy; return p; }
Durch die Implementierung dieser Funktion können die vier Punkte der Karte gedreht werden, um zu bestimmen, welche Karte darunter liegt der Maus, was eine effektive Mausinteraktion im Kartenspiel ermöglicht.
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!