Was ist der schnellste Algorithmus, um zu überprüfen, ob sich zwei Würfel schneiden (wobei die Würfel nicht achsenausgerichtet sind)?

7

Ich suche nach einem Algorithmus, um zu überprüfen, ob sich zwei Würfel schneiden. Man kann prüfen, ob jede der 6 Flächen von Würfel A von jeder der 12 Kanten von Würfel B geschnitten wird, aber das sind 72 Prüfungen. Ich habe gehört, dass es ein Papier aus dem Jahr 1997 gibt, das eine Methode beschreibt, die nur 15 Kreuzungsprüfungen verwendet, aber ich kann sie nicht finden. Können Sie uns bitte den Namen des Papiers mitteilen, es beschreiben oder in Ihren Worten beschreiben?

Diese Frage befasst sich mit achsenausgerichteten Würfeln, was nicht wirklich nützlich ist. /programming/5009526/overlapping-cubes

Stepan
quelle
Kanten. Ich habe es korrigiert.
Stepan

Antworten:

5

Trennachsentest. (Auch Trennachsensatz genannt, Trennachsentest, yada yada.)

Wenn Sie eine Achse (JEDE Achse) finden, nicht nur reguläre XYZ-Basisvektoren, bei der sich die Projektionen Ihrer beiden Würfel nicht überlappen, schneiden sie sich nicht.

Es gibt eine Menge Tutorials und Implementierungen, die über Google verfügbar sind, aber dieses hat hübsche Grafiken:

https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169

Dies ist es, was wir unseren Spielentwicklern beibringen und sie alle bekommen Jobs. :) :)

Das Überprüfen von Schnittpunkten von Scheitelpunkten und Flächen oder Kanten deckt auch nicht den Fall ab, in dem Würfel verschachtelt sind, sodass dies keine echte Lösung ist. SAT sieht in 3D kompliziert aus, aber es ist nur eine Menge Wiederholung. Schneiden Sie einige Randfälle aus, fügen Sie sie ein, zeichnen Sie sie nach und probieren Sie sie aus.

Eine schmutzig einfache Methode, die für die Breitphasenkollisionserkennung gut genug ist, besteht darin, die Würfel als Kugeln zu behandeln. (Wenn es sich wirklich um normale Würfel handelt, ist der Fehler gering, obwohl er proportional zur Skalierung der Würfel relativ zueinander ist.)

Ermitteln Sie den Abstand zwischen der Mitte der Würfel und prüfen Sie, ob er größer ist als die Summe der halben Diagonalen der beiden Würfel. (Grundsätzlich überprüfen Sie Begrenzungskugeln, anstatt sich über Hyperebenen Gedanken zu machen.)

3Dave
quelle
Sie können auch GJK
Anonymous Anonymous
1
@AnonymousAnonymous Ich vermeide TLA wann immer möglich.
3Dave
1
Ok ... Gilbert-Johnson-Keerthi Distanzalgorithmus ... :-)
Anonym Anonym