Trovare il punto di collisione


8

Sto scrivendo un simulatore di corpo rigido 2D. Gli oggetti da simulare sono poligoni convessi. La mia domanda riguarda come decidere il "punto" di collisione, in modo che quando applico una forza di risposta, posso anche calcolare la coppia.

In 2D, il metodo popolare di rilevamento delle collisioni a fase stretta sembra essere il teorema dell'asse di separazione. Tuttavia, mentre questo ti dà il "si stanno scontrando?" oltre a "di quanto?", NON fornisce un punto di riferimento (di cui sono a conoscenza) a cui applicare la forza di risposta (e quindi calcolare la coppia) *.

L'altro metodo (che mi interessa anche di più, perché è quello che viene utilizzato in 3D, che sarebbe il passo logico successivo) è calcolare la differenza di Minkowski dei due poligoni e decidere che si scontrano se (0,0) è contenuto nel poligono risultante. Ma come si usa questo per decidere il punto relativo in cui applicare la forza di risposta? La mia ipotesi è che, poiché ogni faccia di questa differenza corrisponde effettivamente a una faccia di uno dei poligoni, la distanza di separazione è la distanza più breve da (0,0) al MD, e la applichi alla faccia corrispondente sul poligono .

Come bonus, come si fa in 3D?

* Mentre sto scrivendo questo, mi sono appena reso conto che, usando SAT, potevo semplicemente tenere traccia di quali punti si sovrappongono e applicare la forza alla "media" di quei punti. Ma dovrei decidere su quale dei diversi assi non separatori eseguire questo piccolo trucco ...

Risposte:


6

Le parole chiave che stai cercando sono "punti di supporto" e "molteplici" .

Erin Catto ha scritto un eccellente motore fisico 2D. Presenta regolarmente al GDC. Dovresti riuscire a trovare alcune delle sue diapositive in cui spiega le varietà delle collisioni. La prima versione del suo motore fisico supportava solo le forme delle scatole per calcolare semplicemente i punti di supporto. È qui che il motore ha preso il nome Box2D .

La risposta è troppo complessa per essere descritta completamente qui, ma la panoramica è che devi scegliere un totale di 2 punti tra le due forme. Quindi applicare la forza di restituzione equamente a ciascuno. Dovrai anche occuparti di un caso angolare in cui è meglio usare solo un punto di supporto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.