Test d'intersection de boîtes englobantes alignées sur un objet 2D


9

J'ai deux boîtes englobantes alignées sur l'objet (c'est-à-dire non alignées sur l'axe, elles tournent avec l'objet). Je voudrais savoir si deux boîtes alignées sur un objet se chevauchent. ( Édition: note - J'utilise un test de boîte englobante alignée sur l'axe pour éliminer rapidement les objets distants, donc peu importe si la routine quad est un peu plus lente. )

Mes boîtes sont stockées sous forme de quatre points x, y. J'ai cherché des réponses, mais je ne peux pas comprendre les noms de variables et les algorithmes dans les exemples pour les appliquer à mon cas particulier.

Quelqu'un peut-il m'aider à montrer comment cela serait fait, de manière claire et simple? Merci. (Le langage particulier n'est pas important, le pseudo-code de style C est OK.)

Réponses:


5

Si vous savez où chercher, c'est facile. Vous recherchez oobb. Allez ici: http://www.realtimerendering.com/intersections.html .
Vous y trouverez un lien vers ce site http://www.geometrictools.com/LibMathematics/Intersection/Intersection.html
et vous y trouverez le code correct. (ctrl + f "Intersection de boîtes (2D)")

Il utilise SAT et contient des codes source et des articles.


L'algorithme décrit par les outils géométriques est celui que j'aurais indiqué.
Jari Komppa

Je comprends que c'était il y a 4 ans, mais expliquez toujours un downvote et tout ça. C'est assez "Votre réponse est dans un autre château", et maintenant la réponse ne semble même pas être là dans le deuxième cas.
Yann

2

Le moyen le plus simple est probablement de tester chaque sommet de la case B contre chaque côté de la case A (calculer la distance signée). De cette façon, vous pouvez classer chaque sommet comme "devant" ou "derrière" le segment.

Si tous les sommets de B sont classés "devant" l'un des segments de A, B et A ne se chevauchent pas; sinon, ils le font.

Cela est quelque peu compliqué, vous pouvez donc obtenir un gain de performances en effectuant d'abord une vérification cercle-cercle, en utilisant les cercles de délimitation des carrés (trivial pour calculer)


Je fais d'abord un test de boîte englobante alignée sur l'axe pour éliminer rapidement les objets distants ... avez-vous cependant plus de détails sur le test quad-quad?
AshleysBrain

faire pivoter temporairement les deux quads avec la même transformation de telle sorte que l'un d'eux se retrouve aligné sur l'axe ... puis utilisez le test SAT comme il convient de le mentionner. lorsque le résultat est trouvé, inversez la rotation pour les récupérer.
Steve H
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.