2008-08-27 18 views

Respuesta

2

Personalmente, me encanta el trabajo de Paul Bourke.

Además, Paul Nettle solía escribir sobre el tema. Él tiene una biblioteca completa de detección de colisiones en 3D, pero puede estar más interesado en las ideas detrás de tales bibliotecas (que son muy aplicables a 2D). Para eso, vea General Collision Detection for Games Using Ellipsoids.

+0

El trabajo de Paul Bourke parece estar desconectado. La última versión disponible en la máquina de retorno está fechada el [22 de julio de 2012] (https://web.archive.org/web/20120722023704/http://local.wasp.uwa.edu.au/~pbourke/geometry/) . –

0

Si sus objetos se representan como puntos en el espacio 2D, puede usar la intersección de líneas para determinar si dos objetos han colisionado. Puede usar una lógica similar para verificar si un objeto está dentro de otro objeto (y por lo tanto han colisionado incluso si alguna de sus líneas no se está cruzando). El math to do this es bastante simple y debe estar cubierto por cualquier libro de texto sobre geometría básica. Sin embargo, detectar si un objeto ha pasado completamente a través de un objeto puede ser un poco más complicado.

2

Metanet Software ha publicado some relevant tutorials. Metanet desarrolla N (basado en Flash, para Windows, Mac, Linux) y N+ (para X360, DS y PSP).

1

El libro 'Detección de colisiones en tiempo real' de Christer Ericson (ISBN: 1-55860-732-3) es un libro reciente (2005) ampliamente elogiado que debería darte algunas buenas respuestas.

Comienza con un manual básico de algunas de las matemáticas que necesitará saber, y luego entra en varios tipos de volúmenes delimitadores (esferas, recuadros delimitadores de ejes, recuadros delimitadores orientados) comúnmente utilizados en la detección de colisiones.

Siguiente a discusión son numerosos algoritmos para la detección de colisiones entre varias combinaciones de primitivas, tales como líneas, triángulos, esferas, polígonos, planos, volúmenes que limitan etc.

También de importancia es la cobertura de algunas de las métodos principales de división espacial y organización de sus objetos (jerarquías de volúmenes, árboles BSP, octrees, etc.). Esto esencialmente acelera la detección de colisiones, ya que le permite subdividir sus objetos para evitar comparaciones innecesarias entre objetos (por ejemplo, sé por mis estructuras de datos que el objeto A está demasiado lejos para golpear el objeto B, así que ni siquiera lo haré un control de distancia).

También incluye cierta cobertura de cómo comprobar realmente para las colisiones entre objetos en movimiento (intervalos, etc) pero ser conscientes de que a pesar de que este es un libro bastante fuerte y cubre bien el material, que es para la detección de colisiones , no resolución o respuesta. Por lo tanto, le ayudará a determinar si dos objetos han colisionado, pero realmente no qué hacer al respecto, es decir, cómo resolverlo. Las pruebas de intersección generalmente le darán los datos que necesita para tomar tales decisiones, pero en términos del problema general de escribir un solver, que utiliza rutinas de detección de colisión para detectar colisiones y luego decidir qué hacer con ellas, este libro no no cubrir eso en profundidad.

13

La detección de colisiones es a menudo un proceso de dos fases.Algún tipo de algoritmo de "fase amplia" para determinar si dos objetos tienen una posibilidad de superposición (para tratar de evitar n^2 se compara) seguido de un algoritmo de detección de colisión de "fase estrecha", que se basa en los requisitos de geometría de su aplicación .

Sweep and Prune es un algoritmo eficiente de fase amplia bien establecido (con un puñado de variantes que pueden o no adaptarse a su aplicación) para objetos sometidos a movimientos relativamente físicos (cosas que se mueven locamente o tienen tamaños y regiones delimitadoras muy diferentes) esto no es adecuado). La biblioteca Bullet tiene una implementación 3d para referencia.

La colisión de fase estrecha a menudo puede ser tan simple como "CircleIntersectCircle". De nuevo, las bibliotecas Bullet tienen buenas implementaciones de referencia. En tierra 3D cuando se requiere una detección más precisa para objetos arbitrarios, GJK está entre la crema actual de la cosecha - nada de lo que yo sepa evitaría que se adapte a 2d (pero podría terminar más lento que simplemente forzar todos tus bordes;)

Finalmente, después de detectar colisiones, a menudo necesita algún tipo de respuesta de colisión. Box 2d es un buen punto de partida para una solución de respuesta física.

Cuestiones relacionadas