1

Bonjour à tous (ça fait un bail),

j'imagine que le sujet à déjà été traité 10 fois mais je n'arrive pas à mettre la main dessus en cherchant dans les archives.

Je cherche un moyen rapide de détecter une collision 2D entre un cercle (définit par son centre xc, yc et son rayon r par exemple) et un rectangle qu'on connait par son coin supérieur gauche et son coin inférieur droit.
La collision doit être parfaite ! pas question d'approximer le cercle par un rectangle.

La méthode que j'ai pour l'instant est un peu longue:
- si le centre se trouve "compris" entre les extrémités d'une face, je regarde la distance R du centre à cette face, pour voir si R <= r

___O
______
|_____|

ce cas correspond au collision brute vers le bas, ou haut, ou gauche ou droite
- si le centre est situé en "dehors" des faces, je test si une des distances au 4 coins est inférieure à r

O -______
__|

ce cas correspond aux collisions dans les angles que ne gère pas le test précédant.

Merci.

PS: évidemment on peut ne pas se lancer dans tout ces tests en regardant au préalable si la distance entre le centre du cercle et le centre du rectangle sont espacées de plus de rayon_balle + grand_côté_rect/2. mais ça c'est une optimisation à part.
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

2

Heu tu cherche quoi en fait ? confus
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3

tu peux essayer de prendre le point M du rectangle le plus proche du centre de la balle (xM = xc<=x1 ? x1 : xc<=x2 ? xc : x2, et idem pour y), et alors la balle ne touche pas le rectangle ssi la distance CM > r smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

4

Godzil (./2) :
Heu tu cherche quoi en fait ? confus

Pim89 (./1) :
Je cherche un moyen rapide de détecter une collision 2D entre un cercle (définit par son centre xc, yc et son rayon r par exemple) et un rectangle qu'on connait par son coin supérieur gauche et son coin inférieur droit.


Ce n'était pas clair ? smile j'ai proposé une méthode mais qui ne me convient pas vraiment, je voulais savoir si qq'un en avait une autre.

Pollux >> oui je vais voir avec ça si c'est plus rapide, merci.
Ca marche parfaitement et plutôt rapide, ça permet en plus d'en déduire le point d'impact etc. encore merci.

Le sujet est donc clos.
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^