Eu tenho um mecanismo de física 2D básico em execução. É praticamente um mecanismo de partículas, apenas usa formas básicas como AABBs e círculos, para que nenhuma rotação seja possível. Tenho um CCD implementado que pode fornecer um TOI preciso para dois objetos em movimento rápido e tudo está funcionando sem problemas.
Meu problema agora é que não consigo descobrir como determinar se dois objetos em movimento rápido devem ser verificados um contra o outro em primeiro lugar. Estou usando uma árvore quádrupla para particionamento espacial e, para cada objeto em movimento rápido, verifico os objetos em cada célula que ele passa. Isso funciona bem para determinar a colisão com geometria estática, mas significa que qualquer outro objeto em movimento rápido que possa colidir com ele, mas que não esteja em nenhuma das células verificadas, nunca será considerado.
A única solução para isso que consigo pensar é ter as células grandes o suficiente e cruzar os dedos o suficiente, ou implementar algum tipo de algoritmo de força bruta. Existe uma maneira adequada de lidar com isso, talvez alguém tenha resolvido esse problema de maneira eficiente. Ou talvez haja uma maneira melhor de particionar o espaço que explica isso?
Aqui está um diagrama:
As "áreas de efeito" do objeto A e B se cruzam, elas devem ser verificadas uma contra a outra. Mas, do jeito que estou verificando colisões atualmente, não explica isso. Novamente, eu posso pensar em algumas soluções para isso, como verificar se os caminhos dos objetos se cruzam quando a velocidade é maior que x, ou algo assim, mas isso parece um hack e é uma bagunça tentar e implementar.
fonte
Respostas:
O problema de que você está falando é geralmente chamado de 'detecção de colisão de fase ampla' e sua solução é um 'volume varrido', não realmente um hack, exatamente como é feito (basta pegar o AABB do objeto, incluindo o início e o final do movimento e use isso para colisão - embora as coisas fiquem um pouco complicadas com as rotações).
Em seguida, o algoritmo de detecção de colisão de fase larga que torna esse processo rápido é chamado de "Varredura e remoção".
fonte