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 :
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
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(θ)
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
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; }
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!