2D-Polygon Collision Detection
Kennt jemand eine einfach Weg, um zu überprüfen, ob zwei Polygone, vor allem Rechtecke kollidieren? Ich fand einen einfachen Weg, um zu sehen, wenn sich zwei berühren, nur durch überprüfung, ob alle Linien auf der zwei Rechtecke kollidieren, aber das wird nicht funktionieren, wenn man das polygon in einem anderen. Kennt jemand ein effizienter Weg, dies zu tun oder einfach nur ein Weg, der funktioniert?
Auch, kann jemand bitte geben Sie mir eine Formel für oder so etwas und nicht nur Ihre Gedanken zu dem Thema.
Dank
- Sind die Seiten des Rechtecks ausgerichtet, um die X - und Y - Achsen? BTW, schauen Sie sich eine Frage im Zusammenhang: stackoverflow.com/questions/3851520/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachschlagen die Trennung von Achse-Theorem. Gibt es ein tutorial hier.
Es ist schnell, elegant, robust, nicht zu schwer, und hat viele Ressourcen.
Check-out http://www.metanetsoftware.com/technique/tutorialA.html
Diese Website hat mir geholfen, unendlich viel bei der Entwicklung meiner eigenen collision detection-Routinen. Abhängig von der Menge der verfügbaren Rechenleistung, die Sie tun können, gerade über alles, was Sie wollen in Bezug auf Kollision Genauigkeit. Beginnend mit der geringsten Prozessor-intensive:
1) Bounding-box: Gut für rechteckige Formen und schnell zum boot. Alles, was Sie wissen müssen, ist, die (x, y) position des Objekts sowie seine Breite und Höhe.
2) Separating Axis Theorem (SAT): in der Lage zu handhaben komplexer Formen und ist ziemlich intuitiv.
3) SAß mit Voronoi-Regionen (VR): Informationen Verwendet, auf dem der Knoten eines gegebenen Polygons am nächsten ist, um eine Verringerung der Gesamtzahl der Berechnungen.
Alle der oben genannten ist, erklärt in-Tiefe in den obigen link. Es sollte angemerkt werden, dass die bisher erwähnten Methoden sind am effektivsten für konvexe Polygone. Wenn Sie gehen wollte, ins absurde Maß an Genauigkeit, Sie beginnen die Bewegung in Dinge wie bitmap-Prüfung, das ist entsetzlich langsam und in der Regel overkill für fast alles.
Gibt es mehrere Methoden, die einfacher ist nur zu prüfen, wenn es ist, und überlappen sich in X-oder Y-Grenzen. Dies funktioniert aber nur mit Rechtecken ausgerichtet mit der Achse.
Gibt es Grenzen der überprüfung, ist die Ecke eines Objektes innerhalb der Grenzen der Koordinaten des anderen.
Von dort Kollisionserkennung wird noch erweitert. Überprüfen, um zu sehen, ob es eine Zeile kann man sich zwischen Ihnen, in jede Richtung und so.
Beispiel:
Rechteck Ein
Linken, oberen Ecke (x,y). Breite, Höhe.
Rechteck B
Linken, oberen Ecke (x1,y1).
Zustand
(x>=x1) und (x<=x1+Breite) => Kollision für die x-Achse. Für die y-Achse das gleiche, aber mit y und y1 und Höhe.