2010-10-19 7 views
8

Kennt jemand eine einfache Möglichkeit zu überprüfen, ob zwei Polygone, insbesondere Rechtecke, zusammenstoßen? Ich habe einen einfachen Weg gefunden, um zu sehen, ob sich zwei berühren, indem ich einfach überprüfe, ob irgendwelche Linien auf den beiden Rechtecken zusammenstoßen, aber dies funktioniert nicht, wenn ein Polygon in einem anderen ist. Kennt jemand einen effizienteren Weg, dies zu tun, oder nur einen Weg, der funktioniert?2D Polygon Collision Detection

Auch kann mir bitte jemand eine Formel dafür geben oder so etwas und nicht nur Ihre Gedanken zu dem Thema.

Danke

+0

Sind die Seiten des Rechtecks ​​auf die X- und Y-Achse ausgerichtet? BTW, überprüfen Sie eine verwandte Frage: http://Stackoverflow.com/questions/3851520/basic-2d-collision-detection – Arun

Antwort

12

Schauen Sie sich den Trennachsensatz an. Es gibt ein Tutorial here.

Es ist schnell, elegant, robust, nicht zu schwer und hat viele Ressourcen.

+0

Hah .. Ich erinnere mich an das Tutorial .. es ist gut, und hat viele schöne Bilder, aber ich nie hat es geschafft, etwas Nützliches daraus zu machen. – mpen

+0

Versuchen Sie es dann schwerer zu verstehen. –

+1

Wenn mit Rechteck arbeitet, aber nie vergessen, der Trennachse Theorem ist nur für konvexe Polygon – Madlozoz

0

Es gibt mehrere Methoden, die einfache ist nur zu prüfen, ob es gibt und Überschneidungen in X oder Y Grenzen. Dies funktioniert jedoch nur mit Rechtecken, die an der Achse ausgerichtet sind.

Es gibt Grenzen zu überprüfen, ist die Ecke eines Objekts mit den Grenzen der Koordinaten des anderen.

Von dort wird die Kollisionserkennung weiter fortgeschritten. Überprüfen, um zu sehen, ob es eine Linie gibt, die zwischen ihnen in irgendeiner Richtung und so gezeichnet werden kann.

+0

Übrigens ist die letzte Methode, die ich erwähnt, Trennung Axialtheorem. Was man benutzt, hängt davon ab, was genau man braucht. – ewanm89

-3

Beispiel:

Rechteck A

links, obere Ecke (x, y). Breite Höhe.

Rechteck B

links, obere Ecke (x1, y1).

Zustand

(x> = x1) und (x = x1 + < Breite) => Kollision für x-Achse. Für Y-Achse das gleiche aber mit y und y1 und Höhe.

5

Check out http://www.metanetsoftware.com/technique/tutorialA.html

Diese Stelle half mir unendlich, wenn meine eigenen Kollisionserkennungsroutinen zu entwickeln. Je nach verfügbarer Rechenleistung können Sie in Bezug auf die Kollisionsgenauigkeit alles erreichen, was Sie wollen. Beginnend mit dem wenigsten Prozessorintensiv:

1) Bounding-Box: Gut für rechteckige Formen und schnell zu booten. Alles, was Sie wissen müssen, ist die (x, y) Position des Objekts sowie seine Breite und Höhe.

2) Trenn Axis Theorem (SAT): Kann komplexere Formen handhaben und ist ziemlich intuitiv.

3) SAT mit Voronoi-Regionen (VR): Verwendet Informationen darüber, welcher Eckpunkt eines gegebenen Polygons am nächsten ist, um die Gesamtzahl der Berechnungen zu reduzieren.

All dies wird im obigen Link ausführlich erklärt. Es ist anzumerken, dass die genannten Methoden bisher am besten für konvexe Polygone geeignet sind.Wenn Sie in absurde Genauigkeitsniveaus gehen wollten, dann beginnen Sie mit Dingen wie Bitmap-Tests, die schrecklich langsam und für fast alles zu viel Overkill sind.