|

SIMULACIÓN

Modelos de colisión entre partículas

Vamos a ver la colisión entre partículas como la interacción entre 2 partículas que durante el contacto, intercambian energía que modifica su movimiento. Vamos a ver dos modelos de simular la colisión entre dos partí, el modelo del muelle y el modelo de las velocidades de salida.

En general vamos a distinguir 3 fases, la detección, que es común en los dos métodos que vamos a ver, el reposicionamiento y la respuesta.
En la fase de detección hemos de comprobar la distancia a la que se encuentranlas dos partís, si ésta es menos que la suma de los radios de ambas partículas, hay colisión, por lo que pasaremos a la siguiente fase. Para calcular la distancia entre partículas hemos de calcular la distancia entre la posición de los centros de ambas part&icute;culas, es decir, calcular el módulo del vector que une ambos centros.

DETECCIÓN
distancia = | posicion2 - posicion 1 |
distacia_minima = radio2 - radio1
si distancia < distancia_minima --> HAY COLISIÓ

MODELO MUELLE
Calculamos el ángulo de colisión. La posición a la que irán las partículas con el seno y el coseno del ángulo que se forma entre los centros.
La nueva aceleración dependerá de la posición objetivo y una constante de elasticidad. Por último actualizaremos las velocidades con la aceleración calculada.

angulo = arcotangente(distancia.x, distancia.y)
objetivo.x = posicion1.x + cos(angulo) - distancia_minima
objetivo.y = posicion1.y + sen(angulo) - distancia_minima
aceleracion = (objetivo - posicion1) * cte_elástica
Actualización de la velocidad
velocidad = velocidad + aceleración

MODELO VELOCIDADES DE SALIDA
Comenzamos descomponiendo la velocidad en tangencial y normal.

vel_normal = proyeccion(velocidad, distancia)
vel_tangencial = velocidad - vel_normal

Fase 2: restitución

L = distancia_minima - distancia = lo que ha penetrado una partícula en la otra.
vel_relativa = |(vel_normal1 - vel_normal2)|
pos1_nueva = pos1 + (vel_normal1 - L/vel_relativa)

Fase 3: Cálculo de las velocidades de salida

Escalar u1 = proyeccion(normal, distancia)
modulo v1 = (((masa1 - masa2)*u1 + 2*masa2*u2)/ masa1 + masa2)
vel_normal' = |distancia| * v1
velocicidad1' = vel_normal' + tangencial