Heim >Backend-Entwicklung >C++ >Wie drehe ich einen Punkt um einen festen Punkt in 2D?

Wie drehe ich einen Punkt um einen festen Punkt in 2D?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-08 15:21:12648Durchsuche

How Do I Rotate a Point Around a Fixed Point in 2D?

Punkte um einen festen Punkt in 2D drehen

Um in einem Kartenspiel einen realistischen Kartenfächereffekt zu erzeugen, ist dies notwendig um die Koordinaten der Kartenpunkte so zu transformieren, dass sie mit dem Drehwinkel übereinstimmen. Die Allegro-API bietet eine praktische Funktion zum Drehen von Bitmaps, aber das Verständnis der zugrunde liegenden mathematischen Operationen ist für die Kollisionserkennung von entscheidender Bedeutung.

Rotationstransformationsalgorithmus

Um einen Punkt zu drehen ( x, y) um einen festen Punkt (cx, cy) um einen Winkel θ, folgen Sie diesen Schritte:

  1. Subtrahieren Sie den Drehpunkt:Subtrahieren Sie die x- und y-Koordinaten des Drehpunkts von den Koordinaten des zu drehenden Punkts:

    dx = x - cx
    dy = y - cy
  2. Rotationsmatrix anwenden: Wenden Sie die Rotationsmatrix an, um den Punkt zu drehen Winkel θ:

    x_new = dx * cos(θ) - dy * sin(θ)
    y_new = dx * sin(θ) + dy * cos(θ)
  3. Hinzufügen des Drehpunkts zurück: Füge die x- und y-Koordinaten des Drehpunkts wieder zur transformierten hinzu Koordinaten:

    x = x_new + cx
    y = y_new + cy

Implementierung

Unter Verwendung dieses Algorithmus ist hier eine C-ähnliche Funktion zum Durchführen der Drehung:

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;
}

Mit dieser Funktion können Sie nun die Punkte der Karte drehen, um die Kollisionserkennung für den Mausklick durchzuführen Veranstaltungen.

Das obige ist der detaillierte Inhalt vonWie drehe ich einen Punkt um einen festen Punkt in 2D?. 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