Maison > développement back-end > C++ > Comment faire pivoter un point autour d'un point fixe en 2D ?

Comment faire pivoter un point autour d'un point fixe en 2D ?

Patricia Arquette
Libérer: 2024-12-08 15:21:12
original
655 Les gens l'ont consulté

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

Points rotatifs autour d'un point fixe en 2D

Afin de créer un effet d'éventail de cartes réaliste dans un jeu de cartes, il est nécessaire pour transformer les coordonnées des points de la carte pour les aligner sur l'angle de rotation. L'API Allegro fournit une fonction pratique pour faire pivoter les bitmaps, mais la compréhension des opérations mathématiques sous-jacentes est cruciale à des fins de détection de collision.

Algorithme de transformation de rotation

Pour faire pivoter un point ( x, y) autour d'un point fixe (cx, cy) d'un angle θ, suivez ces étapes :

  1. Soustraire le point pivot : Soustraire les coordonnées x et y du point pivot des coordonnées du point à faire pivoter :

    dx = x - cx
    dy = y - cy
    Copier après la connexion
  2. Appliquer la matrice de rotation : Appliquer la matrice de rotation pour faire pivoter le point par angle θ :

    x_new = dx * cos(θ) - dy * sin(θ)
    y_new = dx * sin(θ) + dy * cos(θ)
    Copier après la connexion
  3. Ajouter le point pivot en arrière : Ajoutez les coordonnées x et y du point pivot au fichier transformé coordonnées :

    x = x_new + cx
    y = y_new + cy
    Copier après la connexion

Implémentation

En utilisant cet algorithme, voici une fonction de type C pour effectuer la rotation :

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;
}
Copier après la connexion

Grâce à cette fonction, vous pouvez désormais faire pivoter les points de la carte pour effectuer la détection de collision au clic de la souris événements.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal