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.)

AshleysBrain
la source

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.

Notabene
la source
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)

ggambett
la source
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