Den Kollisionspunkt finden

8

Ich schreibe einen 2D-Starrkörpersimulator. Die zu simulierenden Objekte sind konvexe Polygone. Meine Frage ist, wie ich über den "Kollisionspunkt" entscheiden soll, damit ich beim Aufbringen einer Reaktionskraft auch das Drehmoment berechnen kann.

In 2D scheint die beliebte Methode zur Erkennung von Schmalphasenkollisionen das Trennachsen-Theorem zu sein. Während dies Ihnen jedoch das "Kollidieren sie?" sowie "um wie viel?" gibt es Ihnen KEINEN Referenzpunkt (den ich kenne), an dem Sie die Reaktionskraft anwenden (und somit das Drehmoment berechnen) *.

Die andere Methode (die mich auch mehr interessiert, weil sie in 3D verwendet wird, was der logische nächste Schritt wäre) besteht darin, die Minkowski-Differenz der beiden Polygone zu berechnen und zu entscheiden, dass sie kollidieren, wenn (0,0) ist im resultierenden Polygon enthalten. Aber wie verwenden Sie dies, um den relativen Punkt zu bestimmen, an dem die Antwortkraft angewendet werden soll? Meine Hypothese ist, dass, da jede Fläche dieses Unterschieds effektiv einer Fläche eines der Polygone entspricht, der Abstand der kürzeste Abstand von (0,0) zur MD ist und Sie diesen auf die entsprechende Fläche des Polygons anwenden .

Wie macht man das als Bonus in 3D?

* Während ich dies schreibe, habe ich gerade festgestellt, dass ich bei Verwendung von SAT einfach verfolgen kann, welche Punkte sich überlappen, und die Kraft auf den "Durchschnitt" dieser Punkte anwenden kann. Aber ich müsste mich entscheiden, welche der mehreren nicht trennenden Achsen diesen kleinen Trick ausführen soll ...

Kricket
quelle

Antworten:

6

Die gesuchten Schlüsselwörter sind "Support Points" und "Manifold" .

Erin Catto hat eine exzellente 2D-Physik-Engine geschrieben. Er präsentiert regelmäßig auf der GDC. Sie sollten in der Lage sein, einige seiner Folien zu finden, auf denen er Kollisionsverteiler erklärt. Die erste Version seiner Physik-Engine unterstützte nur Kastenformen, um einfach die Stützpunkte zu berechnen. Hier hat der Motor seinen Namen Box2D .

Die Antwort ist zu komplex, um sie hier vollständig zu beschreiben. In der Übersicht müssen Sie jedoch insgesamt 2 Punkte aus den beiden Formen auswählen. Wenden Sie dann die Rückerstattungskraft gleichermaßen auf jeden an. Sie müssen sich auch mit einem Eckfall befassen, bei dem es besser ist, nur einen Stützpunkt zu verwenden.

deft_code
quelle