2012-07-06 21 views
7

Soy consciente de cómo comprobar si dos círculos se cruzan entre sí. Sin embargo, a veces los círculos se mueven demasiado rápido y terminan evitando la colisión en el siguiente cuadro.Predicción de colisión Circle-Circle

Mi solución actual al problema es verificar la colisión círculo circular una cantidad arbitraria de veces entre la posición anterior y su posición actual.

¿Existe una forma matemática de calcular el tiempo que tardan los dos círculos en colisionar? Si pudiera obtener ese valor de tiempo, podría mover el círculo a la posición en ese momento y luego colisionarlos en ese punto.

Editar: Velocidad constante

+3

Esto es un poco vago. ¿Cuál es el patrón de movimiento de tus círculos? ¿¿velocidad constante?? – mathematician1975

+0

Velocidad constante, sí. Lo siento, no estoy al 100% de cómo hacer esta pregunta. He buscado muchos resultados solo para recordarme que no soy el mejor en física. – Bojo

+0

Sí, hay una manera. Sí, estoy seguro de que es un cálculo simple. Sin embargo, no tengo ni idea de qué se trata :(Sé que es un cálculo bastante básico. –

Respuesta

11

Asumo el movimiento de los círculos es lineal. Digamos que la posición del círculo central de A está dada por la ecuación vectorial Ca = Oa + t*Da donde

Ca = (Cax, Cay) es la posición actual
Oa = (Oax, Oay) es la posición de partida
t es el tiempo transcurrido
Da = (Dax, Day) es el desplazamiento por unidad de tiempo (velocidad).

Del mismo modo para el centro del círculo B: Cb = Ob + t*Db.

Luego quiere encontrar t tal que ||Ca - Cb|| = (ra + rb) donde y rb son los radios de los círculos A y B respectivamente.

cuadratura ambos lados:
||Ca-Cb||^2 = (ra+rb)^2
y en expansión:
(Oax + t*Dax - Obx - t*Dbx)^2 + (Oay + t*Day - Oby - t*Dby)^2 = (ra + rb)^2

Desde que debe obtener un polinomio de segundo grado que se puede despejar t (si existe un tal T).

+0

¡Muchas gracias! Trabajado como un encanto. – Bojo

+0

Esta es una gran ecuación ... pero desafortunadamente mi álgebra está oxidada. ¿Cómo se reorganizaría esa ecuación para resolver para T de una sola vez? –

+1

@MattKenefick ver [aquí] (https://www.wolframalpha.com/input/?i=solve+%28O_1+%2B+t*D_1+-+O_2+-+t*D_2%29%5E2+%2B+%28O_3+%2B + t * D_3 + - + O_4 + - + t * D_4% 29% 5E2 +% 3D +% 28r_1 +% 2B + r_2% 29% 5E2 + para + t). –

-2

Se puede predecir mediante el uso de colisión vector de dirección y la velocidad, esto le da los pasos a seguir, y cuando van a hacer una colisión (si no lo será).

sólo tiene que comprobar algoritmo de línea de cruce para detectar que ...

+0

Bueno, tengo la Posición, la Velocidad y la Dirección todas accesibles para usar para cualquier algoritmo que necesito. Ya puedo detectar colisiones circulares lo suficientemente bien. Es solo que mi proyecto se actualiza cada 1/60 de segundo. – Bojo