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?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-07 15:58:11900Durchsuche

How Do You Rotate a Point Around Another Point in 2D Space?

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:

  1. Subtrahieren Sie den Drehpunkt von den Koordinaten des Punkts.
  2. Drehen Sie den Punkt gegen den Uhrzeigersinn.
  3. Fügen Sie den Drehpunkt wieder zu den Koordinaten des Punkts hinzu Koordinaten.

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!

Stellungnahme:
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