Parque de Bolas SaltarinasBeta
Vierte, lanza y explota miles de bolas
Esta herramienta es una versión beta que aún se está estabilizando. Avísanos si un resultado no parece correcto.
Mantén pulsado y arrastra sobre el lienzo. En «Agitar caja», arrastra para sacudirla; Mayús+arrastrar o la rueda la giran.
Procesando…
0.0
No se ha bloqueado: el resultado aparecerá cuando termine el cálculo.
Acerca de Parque de Bolas Saltarinas
Todos los objetos de este simulador son círculos. No guardan una velocidad, solo su posición actual y la anterior (Verlet posicional), y cada fotograma de 1/60 s se divide en seis subpasos. En cada subpaso la gravedad, el rozamiento del aire y la fuerza del puntero mueven los círculos, los rápidos barren su trayecto y se detienen en el primer círculo que tocan, los que salen de las paredes rebotan hacia dentro y, por último, los que se solapan se empujan para separarse en dos pasadas.
Con hasta 6000 círculos no se puede comprobar cada pareja. La pantalla se divide en celdas del ancho del diámetro del círculo más grande, y cada círculo solo se compara con los de su celda y las vecinas (una fase amplia, o broadphase, con rejilla uniforme). Si los círculos están repartidos, el trabajo crece más o menos en proporción a su número.
Los círculos no giran ni tienen rozamiento en la superficie. Aquí no hay funciones de un motor de sólidos rígidos completo, como una pelota que rueda o una pila de ladrillos. Lo que muestra la herramienta es cómo miles de granos chocan y fluyen, y qué se gana y qué se pierde al calcularlo de forma barata y rápida.
Cómo se separan los solapamientos y qué hace Rebote en paredes
Cuando dos círculos se solapan, se separan a lo largo de la línea que une sus centros tanto como sea la profundidad del solapamiento. La masa se toma proporcional al área (radio al cuadrado), así que el círculo más ligero se desplaza más. En ningún momento se calcula una velocidad de impacto. Solo se corrigen posiciones, que es lo que Jakobsen (2001) llamó resolver colisiones y penetraciones por proyección. Como la corrección pasa a formar parte de la velocidad del paso siguiente, nunca hay que ajustar la velocidad por separado.
El precio es que los choques entre círculos apenas rebotan. Deshacer el solapamiento elimina la velocidad de acercamiento, pero nada añade una velocidad de rebote en sentido contrario. El control Rebote en paredes, un coeficiente de restitución, solo actúa en paredes y suelo. Con 0,6, un círculo sale de la pared al 60% de la velocidad con que llegó, y uno que cae alcanza en cada bote 0,6² = 36% de la altura anterior. Por eso los choques entre círculos parecen apagados, más de arena o grano que de bolas de billar.
Efecto túnel: por qué los objetos rápidos atraviesan cosas
Si las colisiones solo se detectan preguntando si dos formas se solapan al final de un subpaso, un objeto que pasa por completo al otro lado de otro dentro de un solo paso se salta el choque. A esto se le llama efecto túnel (tunneling). Motores como Box2D lo evitan con detección continua de colisiones (CCD), que barre cada forma desde su posición anterior hasta la nueva, y permiten marcar los objetos especialmente rápidos como bullets.
Esta herramienta usa una forma sencilla de CCD, la prueba de círculo barrido. Todo círculo que en un subpaso (1/360 s) se mueve más que su propio radio compara con los demás círculos su trayecto completo, de la posición anterior a la nueva. Si toca uno por el camino, se detiene en el punto de contacto y la velocidad relativa en la dirección del contacto se elimina y se reparte según la masa, igual que en un choque inelástico entre círculos. Si los dos círculos se mueven menos que su radio, su movimiento relativo en un paso no supera la suma de los radios y no pueden saltarse, así que no se barren. Por eso, ni con la explosión al máximo se atraviesan ya los círculos. Las paredes recortan las coordenadas, así que tampoco se atraviesan. Los círculos siguen sin girar y sin rozamiento.
Por qué un montón parece algo blando
Al separar una pareja, la vecina vuelve a solaparse, así que resolverlo todo exige varias pasadas. Esta herramienta resuelve el solapamiento de todas las parejas dos veces por subpaso. Si se apilan 2.000 círculos de 5 px de radio en una caja estrecha, el solapamiento más profundo baja de unos 10 px (un diámetro entero) con una sola pasada a alrededor de 1 px. Con cuatro pasadas bajaría algo más, pero con 6.000 círculos cada fotograma costaría aproximadamente el doble otra vez, así que se usan dos. Más subpasos también ayudan, con un coste proporcional. Por eso los motores de juegos ofrecen el número de iteraciones y de subpasos como ajustes.
Como los círculos no tienen rozamiento, un montón no puede mantener una pendiente. La arena real se asienta con un ángulo de reposo estable, pero aquí, si inclinas el montón, se extiende plano como el agua.
Ejemplos
Dejar caer contra una pared con restitución 0,6
- Entrada
Rebote en paredes 0,6, sin rozamiento del aire, soltado desde una altura h- Resultado
Alturas de rebote: 0,36h, luego 0,13h y después 0,047h
En cada bote la velocidad se multiplica por 0,6 y la altura va con el cuadrado de la velocidad, así que cada rebote llega a 0,36 del anterior. Con el rozamiento del aire por defecto (0,15/s) las alturas salen algo menores.
La velocidad a partir de la cual se barre el trayecto
- Entrada
Un círculo de radio 3 px, subpaso de 1/360 s- Resultado
Por encima de 3 px × 360 = 1080 px/s, todo su trayecto se compara con los demás círculos
Los círculos más lentos no pueden moverse entre sí más que la suma de sus radios en un paso, así que no pueden saltarse; solo se comprueba el solapamiento en la posición final.
Cómo se usa
- Elige un modo: verter, atraer, repeler, explotar o agitar.
- Pulsa o arrastra sobre el lienzo para verter círculos o aplicar fuerza.
- Cambia gravedad, rebote en paredes, tamaño, fuerza e inclinación. En el móvil, al inclinar el aparato cambia la dirección de la gravedad.
Términos clave
- Fase amplia (broadphase)
- Paso que selecciona solo las parejas que podrían estar lo bastante cerca como para tocarse, antes de cualquier comprobación exacta. Aquí se usa una rejilla uniforme.
- Efecto túnel
- Saltarse un choque porque un objeto se movió demasiado en un paso de tiempo.
- Coeficiente de restitución
- Velocidad de separación tras un impacto dividida por la velocidad de acercamiento antes de él. Un valor de 1 significa un rebote sin pérdida de energía.
Preguntas frecuentes
Aunque ponga Rebote en paredes a 1, los círculos casi no rebotan entre sí.
Como dice su nombre, solo se aplica a paredes y suelo. Los choques entre círculos solo corrigen las posiciones solapadas, así que se comportan casi como inelásticos.
¿Puede un círculo rápido atravesar a otro?
No. Si un círculo se mueve más que su radio en un subpaso, se comprueba todo su trayecto: se detiene en el primer círculo que toca y lo empuja. Las paredes recortan las coordenadas, así que tampoco se atraviesan.
¿Por qué va más lento con muchos círculos?
Gracias a la rejilla, el trabajo crece más o menos con el número de círculos, pero cuando se amontonan en una zona cada celda contiene más y las comprobaciones se multiplican. El límite es 6000.
Fuentes
- Thomas Jakobsen, Advanced Character Physics, GDC 2001 (CMU course mirror)
- Box2D documentation — Simulation (tunneling, continuous collision, bullets, restitution threshold)
Revisado el: