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 :
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!