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
Freigeben: 2024-12-08 15:21:12
Original
653 Leute haben es durchsucht

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
    Nach dem Login kopieren
  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(θ)
    Nach dem Login kopieren
  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
    Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

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