Die Erkennung des Dreiecks Kollision im 2D-Raum
Wie kann ich programmgesteuert erkennen, ob zwei Dreiecke, die einander berühren, gegeben, deren Eckpunkte auf einem 2D-Koordinatensystem? Dies beinhaltet berührende Punkte oder Kanten, sowie wenn ein Dreieck ist vollständig innerhalb des anderen.
- Sieht in der Nähe ein Duplikat dieser Frage: stackoverflow.com/questions/1903258/... Das ist 3D, nicht 2D, aber vielleicht einige der Antworten, es hilft dir trotzdem.
- Ich sah schon an dieser Frage, so scheint es, viel mehr Informationen als ich brauche, als es in 3D speziell, und ich will nicht unnötig zu verkomplizieren die Berechnungen hier (diese erfolgt in einer Schleife, und sollte so kostengünstig wie möglich).
- Möglich, Duplikat der What ist der effizienteste Weg, um zu erkennen, Dreieck-Dreieck-Kreuzungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die Line-Line-Kreuzung
https://www.topcoder.com/community/data-science/data-science-tutorials/geometry-concepts-line-intersection-and-its-applications/#line_line_intersection
Berücksichtigen Sie auch die Möglichkeit, dass einige der Scheitelpunkt-vielleicht berühren Sie eine der Seiten des anderen Dreiecks.
http://www.blackpawn.com/texts/pointinpoly/default.html
Oder schauen Sie auf diesen link und scrollen Sie nach unten
http://compsci.ca/v3/viewtopic.php?t=6034
Können Sie beweisen, dass die zwei Dreiecke nicht miteinander kollidieren, durch das finden einer Kante (von insgesamt 6 Kanten, die zwei Dreiecke), die fungiert als eine Trennlinie, wo alle Eckpunkte eines Dreiecks liegen auf der einen Seite und die Ecken des anderen Dreiecks liegen auf der anderen Seite. Wenn Sie finden, eine solche Kante, dann bedeutet das, dass die Dreiecke nicht schneiden da sonst die Dreiecke kollidieren.
Hier ist eine Matlab-Implementierung der Dreiecks-Kollision-Funktion. Finden Sie die Theorie der
sameside
Funktion hier: http://www.blackpawn.com/texts/pointinpoly/default.htmlKurz, Hassan ' s Antwort ist am schnellsten.
https://jsfiddle.net/eyal/gxw3632c/
Dies ist der Schnellste code in javascript:
Ich schrieb oben fiddle zu testen, ein paar verschiedene Techniken und vergleichen Sie die Geschwindigkeit. Alle Techniken basieren auf eine Kombination aus drei verschiedenen Werkzeugen:
Diese sind die Werkzeuge. Nun, um herauszufinden, ob Dreiecke schneiden, es gibt 3 Möglichkeiten, die ich getestet: