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

Comment faire pivoter un point autour d'un autre point dans un espace 2D ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 15:58:11908parcourir

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

Rotation d'un point autour d'un autre point en deux dimensions

Cet article aborde le défi du calcul de la rotation d'un point autour d'un autre point en deux dimensions. La tâche se pose dans le développement d'un jeu de cartes où les cartes sont déployées. La fonction al_draw_rotated_bitmap de l'API Allegro facilite l'affichage facile des cartes, mais elle gêne l'interaction de la souris en masquant les cartes en dessous. Pour résoudre ce problème, un test de collision de polygones est proposé, qui nécessite la rotation des quatre points de la carte.

La solution réside dans l'utilisation d'une fonction de rotation qui effectue les opérations suivantes :

  1. Soustrayez le point pivot des coordonnées du point.
  2. Faites pivoter le point dans le sens inverse des aiguilles d'une montre.
  3. Ajoutez à nouveau le point pivot au coordonnées du point.

Cette fonction, rotate_point, est implémentée comme suit :

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

En implémentant cette fonction, les quatre points de la carte peuvent être pivotés pour déterminer quelle carte est sous la souris, permettant une interaction efficace avec la souris dans le jeu de cartes.

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!

Déclaration:
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