2010-06-19 21 views
6

¿Hay una manera de modificar un Gilbert-Johnson-Keerthi Algoritmo lo que encuentra puntos de la colisión entre dos cuerpos en lugar de un resultado verdadero/falso? Por lo que he entendido, el valor de la distancia recibida podría usarse para encontrar estos puntos. Busqué en la web pero no encontré ninguna pista.colisión Puntos en GJK

+0

Pensamientos profanos: si estás haciendo GJK desde el origen a un cuerpo, puedes obtener no solo la distancia desde el origen hasta el cuerpo, sino el punto real en el cuerpo más cercano al origen Para dos cuerpos, sin embargo, estás midiendo la suma de Minkowski A-B. Si los cuerpos han colisionado, obtendrás 0 como resultado, pero necesitarías encontrar todos los pares de puntos (a en A, b en B) cuya diferencia es exactamente 0 para obtener el conjunto de puntos de colisión. Por lo tanto, no veo el resultado GJK que conduzca a una solución general simple. Intente buscar en http://www.pfirth.co.uk/minkowski.html para la intuición. –

+0

¿Conoces alguna otra solución simple para encontrar puntos de impacto entre dos cuerpos? He leído "Ray Casting contra objetos generales convexos con aplicación a la detección continua de colisiones" por Gino Van Den Bergen, pero es realmente complicado y parece que realmente no me ayuda (estoy tratando de hacer un simulador de física y es crucial para que los cuerpos giren correctamente después de la colisión). Por lo que he leído parece que si un cuerpo gira no es tan fácil encontrar puntos de golpe de esta manera. ¿Tal vez algún otro algoritmo que pueda implementar? Puedo verificar cada fotograma si me sirve. – Viuo

Respuesta

3

Lo que está pidiendo no es bien planteado. Si están colisionando, entonces un punto de intersección no está definido, ya que la intersección es en realidad una región de superposición y, por lo tanto, podría haber cualquier cantidad de puntos posibles. En su lugar, debe pensar en un "punto de intersección" como una coordenada en espacio-tiempo, (dx, dy, dz, t), que representa el tiempo de impacto, junto con un vector de traducción entre los dos cuerpos que le da sus configuraciones relativas .

Una forma de modificar GJK para calcular una intersección de espacio-tiempo es hacer una búsqueda binaria sobre el volumen de barrido para encontrar el momento de tiempo justo antes del impacto. Usando estos datos, puede calcular un eje de separación y los puntos extremos correspondientes para ambos cuerpos, lo que le proporciona una aproximación cercana del punto de impacto. Este enfoque también puede ser rápido si reutiliza las simplicidades de las iteraciones previas de la búsqueda para acelerar las pruebas posteriores. Christer Ercisson tiene algunas notas sobre esta técnica aquí: http://realtimecollisiondetection.net/pubs/SIGGRAPH04_Ericson_GJK_notes.pdf

Cuestiones relacionadas