
Contrairement à ce que l’on pourrait penser, la détection des collisions entre un cercle et un rectangle est assez simple (dans le cas d’un rectangle aligné avec les axes).
Pour la calculer, on sépare le travail en plusieurs étapes :
1ère étape : regarder le positionnement du cercle par rapport au rectangle. Il y a 4 résultats possibles : soit le cercle est à gauche de rectangle, soit il est à droite, et pour chacun de ces deux cas, soit il est au dessus du rectangle, soit il est en dessous (si aucune de ces conditions n’est vérifiée, donc si le cercle est à l’intérieur du rectangle, alors on considère directement qu’il y a collision).
2ème étape : selon le positionnement du cercle par rapport au rectangle, on va garder en mémoire différentes coordonnées :
– Si le cercle est à gauche, x = rectangle.x
– Si le cercle est à droite, x = rectangle.x + rectangle.largeur (soit la coordonnée en x du bord droit du rectangle)
– Si le cercle est au dessus, y = rectangle.y
– Si le cercle est en dessous, y = rectangle.y + rectangle.haut (soit la coordonnée en y du bord inférieur du rectangle)
/!\ Par défaut, x = cercle.x et y = cercle.y. Cela permet de gérer les cas où le cercle n’est pas au dessus / en dessous du rectangle, ou s’il n’est pas à gauche / à droite de ce dernier. /!\
Précision : le point de coordonnées (x ; y) correspond au point sur le rectangle le plus proche du centre du cercle. Ainsi, s’il y a collision entre le rectangle et le cercle, c’est ce point qui sera le premier à être dans les deux formes.
3ème étape : calculer la distance entre le cercle et le point de coordonnées x et y que l’on a attribuées dans l’étape 2.
Pour cela, rien de plus simple : Pythagore !
Distance en x = cercle.x – x
Distance en y = cercle.y – y
Distance centre du cercle – point de coordonnées (x, y) = racine(distance_x² + distance_y²).
Toutefois, calculer une racine carrée n’est pas du tout efficace en programmation. C’est pour cela que l’on peut se contenter de simplement garder la distance au carré puisque le rayon du cercle est positif, donc que l’on garde les deux au carré ou que l’on prenne la racine des deux, le résultat sera le même.
4ème étape : Comparer les résultats pour savoir s’il y a collision.
C’est très simple : si la distance au carré calculée est inférieure ou égale au rayon au carré du cercle, alors il y a collision. Sinon, il n’y a pas collision.
Cela est dû au fait que si la distance entre le centre du cercle et le point de coordonnées (x, y) est inférieure ou égale au rayon, cela signifie que soit le cercle et le rectangle se touchent (distance égale au rayon), soit qu’ils se superposent (distance inférieure au rayon).
Pour mieux comprendre, voici deux schémas :

