Détection de Triangle de Collision dans l'Espace 2D
Comment puis-je détecter par programmation si ou non les deux triangles toucher les uns les autres, compte tenu de leurs sommets sur une 2D coordonner avion? Cela inclut les points de contact ou de bords, ainsi que si un triangle est entièrement à l'intérieur de l'autre.
Regarde de plus près à une copie de cette question: stackoverflow.com/questions/1903258/... C'est de la 3D, pas en 2D, mais peut-être que certaines de ses réponses, il y aura vous aider de toute façon.
Je l'ai déjà regardé cette question, il semble avoir beaucoup plus d'information que j'ai besoin, comme c'est en 3D plus précisément, et je ne veux pas compliquer à l'excès les calculs ici (ces sera effectué dans une boucle, et devrait être aussi rentable que possible).
Double Possible de What est le moyen le plus efficace pour détecter triangle-triangle intersections?
Je l'ai déjà regardé cette question, il semble avoir beaucoup plus d'information que j'ai besoin, comme c'est en 3D plus précisément, et je ne veux pas compliquer à l'excès les calculs ici (ces sera effectué dans une boucle, et devrait être aussi rentable que possible).
Double Possible de What est le moyen le plus efficace pour détecter triangle-triangle intersections?
OriginalL'auteur qJake | 2010-05-06
Vous devez vous connecter pour publier un commentaire.
Utiliser la Ligne d'intersection des droites
https://www.topcoder.com/community/data-science/data-science-tutorials/geometry-concepts-line-intersection-and-its-applications/#line_line_intersection
Également envisager la possibilité que certains vertex peut être en contact avec l'un des côtés de l'autre triangle.
http://www.blackpawn.com/texts/pointinpoly/default.html
Ou regardez ce lien et faites défiler vers le bas
http://compsci.ca/v3/viewtopic.php?t=6034
J'allais dire la même chose, mais je pense que vous devez cliquer sur le lien au bas de chercher la PointInPolygon writeup (topcoder.com/tc?module=Static&d1=tutoriels&d2=geometry3)
Pour cela, vous devez vous assurer que tous les 3 sommets sont sur les bords ou à l'intérieur du triangle. Permettez-moi de trouver un lien. En attendant, n'hésitez pas à upvote.
Eh bien, il peut ne pas être assez, mais je peux combiner votre "PointInTriangle" fonction avec un Line-Ligne-fonction de détection pour obtenir ce dont j'ai besoin. (Mon premier commentaire ici était avant que le post a été édité). Merci.
Cool. Si vous voulez faire de ce super-optimisé au détriment de la lisibilité, envisager d'écrire des tests unitaires d'abord avant de bidouiller le code pour le rendre plus rapide.
OriginalL'auteur Hamish Grubijan
Vous pouvez prouver que les deux triangles ne sont pas en collision par trouver un bord (sur un total de 6 arêtes qui composent les deux triangles) qui agit comme une ligne de séparation, où tous les sommets d'un triangle se coucher sur un côté et les sommets de l'autre triangle, se trouvent sur l'autre côté. Si vous pouvez trouver une telle bord, puis il signifie que les triangles ne se croisent pas autrement, les triangles sont entrés en collision.
Ici est un Matlab mise en œuvre du triangle de collision de la fonction. Vous pouvez trouver la théorie de la
sameside
fonction ici: http://www.blackpawn.com/texts/pointinpoly/default.htmlOriginalL'auteur Hassan Nadeem
En bref, la réponse de Hassan est la plus rapide.
https://jsfiddle.net/eyal/gxw3632c/
C'est le plus rapide de code en javascript:
J'ai écrit ci-dessus de violon pour tester quelques techniques différentes et de comparer la vitesse. Toutes les techniques sont basées sur une combinaison de trois outils différents:
Ceux sont les outils. Maintenant à savoir si les triangles se croisent, il y a 3 façons que j'ai testé:
OriginalL'auteur Eyal