Estou escrevendo um simulador de corpo rígido 2D. Os objetos que estão sendo simulados são polígonos convexos. Minha pergunta envolve como decidir sobre o "ponto" da colisão, para que, quando aplico uma força de resposta, também possa calcular o torque.
Em 2D, o método popular de detecção de colisão em fase estreita parece ser o Teorema do Eixo Separador. No entanto, enquanto isso lhe dá o "eles estão colidindo?" além de "por quanto?", NÃO fornece um ponto de referência (do qual eu saiba) no qual aplicar a força de resposta (e assim calcular o torque) *.
O outro método (que também me interessa mais, porque é o que é usado em 3D, que seria o próximo passo lógico) é calcular a diferença de Minkowski dos dois polígonos e decidir se eles estão colidindo se (0,0) for contido no polígono resultante. Mas, como você usa isso para decidir o ponto relativo no qual aplicar a força de resposta? Minha hipótese é que, como cada face dessa diferença corresponde efetivamente a uma face de um dos polígonos, a distância de separação é a menor distância entre (0,0) e o MD, e você a aplica na face correspondente no polígono .
Como bônus, como fazer isso em 3D?
* Enquanto escrevo isso, acabei de perceber que, ao usar o SAT, era possível acompanhar quais pontos se sobrepunham e aplicar a força na "média" desses pontos. Mas eu teria que decidir em qual dos vários eixos não separadores executar esse pequeno truque ...