Encontrar o ponto de colisão


8

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 ...

Respostas:


6

As palavras-chave que você procura são "pontos de suporte" e "coletor" .

Erin Catto escreveu um excelente mecanismo de física 2D. Ele se apresenta regularmente na GDC. Você deve encontrar alguns dos slides dele, onde ele explica os coletores. A primeira versão de seu mecanismo de física suportava apenas formas de caixa para simplesmente calcular os pontos de suporte. Foi aí que o mecanismo recebeu o nome de Box2D .

A resposta é muito complexa para descrever completamente aqui, mas a visão geral é que você precisa escolher um total de 2 pontos das duas formas. Em seguida, aplique a força de restituição igualmente a cada um. Você também terá que lidar com uma caixa de canto onde é melhor usar apenas um ponto de suporte.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.