2010-10-19 31 views
8

¿Alguien sabe simple manera de comprobar si dos polígonos, especialmente rectángulos, están colisionando? Encontré una manera simple de ver si dos se están tocando simplemente comprobando si alguna línea en los dos rectángulos está colisionando, pero esto no funcionará si un polígono está en otro. ¿Alguien sabe una manera más eficiente de hacer esto o solo una manera que funciona?Detección de colisiones poligonales 2D

Además, ¿alguien puede darme una fórmula para eso o algo así y no solo sus pensamientos sobre el tema.

Gracias

+0

¿Están los lados del rectángulo alineados con los ejes X e Y? Por cierto, echa un vistazo a una pregunta relacionada: http://stackoverflow.com/questions/3851520/basic-2d-collision-detection – Arun

Respuesta

12

Busque el Teorema del eje separador. Hay un tutorial here.

Es rápido, elegante, robusto, no demasiado duro y tiene muchos recursos.

+0

Hah ... Recuerdo ese tutorial ... es bueno, y tiene muchas fotos bonitas, pero nunca Logré hacer algo útil con eso. – mpen

+0

Trate de entenderlo más difícilmente entonces. –

+1

Si funciona con un rectángulo, pero nunca olvides que el Teorema del Eje Separador es solo para polígono convexo – Madlozoz

0

Existen varios métodos, el simple es solo verificar si hay superposición en X o Y. Sin embargo, esto solo funciona con rectángulos alineados con el eje.

Hay límites de comprobación, es la esquina de un objeto dentro de los límites de las coordenadas de la otra.

A partir de ahí, la detección de colisiones se hace más avanzada. Verificando si hay una línea que uno puede dibujar entre ellos en cualquier dirección y tal.

+0

Por cierto, el último método que mencioné es el teorema del eje separador. Lo que uno usa depende de lo que uno exactamente necesita. – ewanm89

-3

Ejemplo:

rectángulo A

izquierda, esquina (x, y). Ancho, alto

rectángulo B

izquierda, esquina (x1, y1).

Condición

(x> = x1) y (x < = x1 + anchura) => colisión para el eje x. Para el eje y de esta misma forma pero con y y y1 y altura.

5

Salida http://www.metanetsoftware.com/technique/tutorialA.html

Ese sitio me ayudó infinitamente en el desarrollo de mis propias rutinas de detección de colisión. Dependiendo de la cantidad de potencia de procesamiento disponible, puede hacer casi cualquier cosa que desee en términos de precisión de colisión. Comenzando con el menos procesador intensivo:

1) Caja delimitadora: buena para formas rectangulares y rápido para arrancar. Todo lo que necesita saber es la posición (x, y) del objeto, así como su ancho y alto.

2) Teorema del eje separado (SAT): Capaz de manejar formas más complejas y es bastante intuitivo.

3) SAT con regiones de Voronoi (VR): usa información sobre qué vértice de cualquier polígono dado está más cerca para reducir el número total de cálculos.

Todo lo anterior se explica en profundidad en el enlace anterior. Cabe señalar que, hasta ahora, los métodos mencionados son más efectivos para polígonos convexos.Si quieres entrar en niveles absurdos de precisión, comienzas a pasar a cosas como la prueba de mapa de bits, que es tremendamente lenta y, en general, exagerada para casi cualquier cosa.

Cuestiones relacionadas