J'ai d'abord essayé d'implémenter l'intersection rectangulaire, qui fonctionne bien. Cependant, lorsque je dois appliquer le système physique, comme la vitesse, l'accélération et les vecteurs directionnels, je dois trouver un moyen de déterminer de quel côté des rectangles entrent en collision. Maintenant, dans mon système, il n'y a pas de rectangle tourné, donc cela a simplifié le problème. Cependant, je n'ai pas pu trouver un moyen facile de déterminer quel côté rectangle est entré en collision. J'ai déjà traité ce problème auparavant, mais j'ai lamentablement échoué.
Ce que j'ai fait dans le passé, c'est de déterminer la distance entre chaque côté rectangulaire parallèle et de vérifier si la distance est proche de 0 (utilisez une plage de distance initialement définie) ou est 0. Cependant, pour l'arithmétique à virgule flottante, cela s'avère instable car de temps inconnu. Parfois, les rectangles se coupent réellement avant de rencontrer la plage définie.
D'un autre côté, je pensais à créer plusieurs rectangles, chaque rectangle pour chaque côté. Cependant, après avoir repensé, ce serait la même chose que d'avoir un côté parallèle avec vérification de la plage de distance, juste que cette plage de distance est la largeur de chaque mini-rectangle.
Par conséquent, une suggestion à ce problème?
la source
Réponses:
Adapté de ma réponse à "De quel côté a été touché?" :
Je suggère de calculer la somme de Minkowski de B et A, qui est un nouveau rectangle, et de vérifier où se situe le centre du rectangle A par rapport à ce nouveau rectangle (pour savoir si une collision se produit) et à ses diagonales (pour savoir où la collision est passe):
la source