Tengo un motor de física 2D básico en funcionamiento. Es más o menos un motor de partículas, solo usa formas básicas como AABB y círculos, por lo que no es posible la rotación. Tengo un CCD implementado que puede proporcionar un TOI preciso para dos objetos que se mueven rápidamente y todo funciona sin problemas.
Mi problema ahora es que no puedo determinar cómo determinar si dos objetos que se mueven rápidamente deberían ser comparados entre sí en primer lugar. Estoy usando un árbol cuádruple para la partición espacial y para cada objeto que se mueve rápidamente, lo compruebo contra los objetos en cada celda que pasa. Esto funciona bien para determinar la colisión con la geometría estática, pero significa que cualquier otro objeto de movimiento rápido que pueda chocar con él, pero que no esté en ninguna de las celdas que se verifican, nunca se considera.
La única solución a esto que se me ocurre es tener las celdas lo suficientemente grandes y cruzar los dedos para que sea suficiente, o implementar algún tipo de algoritmo de fuerza bruta. ¿Hay una manera adecuada de lidiar con esto? Quizás alguien resolvió este problema de manera eficiente. ¿O tal vez hay una mejor manera de particionar el espacio que explica esto?
Aquí hay un diagrama:
Las "áreas de efecto" del objeto A y B se cruzan, deben verificarse entre sí. Pero con la forma en que actualmente estoy comprobando las colisiones no se tiene en cuenta esto. Nuevamente, puedo pensar en algunas soluciones para esto, como verificar si los caminos de los objetos se cruzan una vez que su velocidad es mayor que x, o algo así, pero eso se siente como un truco y es un desastre tratar de implementarlo.
fuente
Respuestas:
El problema del que está hablando a menudo se llama 'detección de colisión de fase amplia' y su solución es un 'volumen barrido', no realmente un truco, solo cómo se hace (simplemente tome el AABB del objeto, incluidos el inicio y el final del movimiento y úselo para colisión, aunque las cosas se ponen un poco difíciles con las rotaciones).
Luego, el algoritmo de detección de colisión de fase ancha que hace que esto sea rápido se llama 'Barrer y podar'.
fuente