¿Cómo simular la caída de plumas en box2d?

10

Estoy trabajando con AndEngine con la extensión Box2d, pero también agradeceré una respuesta general o una idea conceptual.

Tengo objetos similares a plumas en un mundo de vista lateral en 2D que quiero ser parte de la simulación física. Estoy usando amortiguación lineal para hacer que la "pluma" caiga lentamente. Esto podría no ser una buena idea, tal vez debería aplicar la fuerza en cada actualización, pero sin embargo, esto funciona y hace que el objeto se vea "ligero" y se siente como si hubiera aire con resistencia.

Ahora, ¿cómo puedo hacer que los objetos parezcan plumas cayendo por el aire?

Específicamente, estoy buscando dos tipos de objetos: largos con baja densidad, que se muevan hacia abajo en un movimiento de balanceo lento y objetos cuadrados que simplemente cambiarían la trayectoria al azar. Sería genial si esto pudiera ser una simulación y la longitud sería un parámetro: cuanto más largo sea el objeto, más oscilará. En este momento quiero simular plumas, hojas y copos de nieve en un mundo de dibujos animados.

Caminos de objetos que caen

MartinTeeVarga
fuente
2
¿Qué tal una captura de pantalla o un boceto conceptual o algo así? Después de todo, hay toneladas de cosas diferentes que podría considerar una pluma, y ​​diría que la mayoría se comportará de manera diferente según su situación.
Mario
Se agregó más información y una imagen.
MartinTeeVarga

Respuestas:

6

Al igual que el alunizaje, debes fingirlo . La física de la autorrotación inducida por aleteo, caída y vórtice es compleja. Hay documentos sobre la simulación de este efecto , y producen algunas animaciones de Java encantadoras .

Pero, incluso iría más lejos en tu falsedad e implementaría algo como una onda sinusoidal creciente para animar el movimiento.

ingrese la descripción de la imagen aquí

Obviamente, querrá ajustar los valores iniciales, la tasa de aumento independiente de la amplitud y la frecuencia hasta que obtenga algo que se parezca más a lo que desea. Desea que se agregue algo de aleatoriedad para que sea interesante. Además, como muestra su ejemplo, los objetos muy ligeros con un área de superficie alta podrían subir cerca de los bordes de sus olas. Entonces, las ondas por encima de cierta amplitud deberían comenzar a tener en cuenta un valor de barrido, con un valor máximo limitado.

Cuanta menos masa y más área de superficie tenga un objeto, más aumentará la amplitud y la frecuencia de la onda sinusoidal. La mayor masa y menor área de superficie debería resultar en una disminución de la amplitud y frecuencia.

MichaelHouse
fuente
3
** Conspirador **
Mikolaj Marcisz
De acuerdo, entonces puedo tener dos funciones, una onda sinusoidal creciente que controlará el movimiento horizontal, luego alguna función que controlará el movimiento vertical y probablemente dependerá de cuán lejos del centro esté el objeto y tendrá una tapa que romperá el movimiento y enviarlo de vuelta ... Si descubro una función combinada que me dará una fuerza, ¿cómo aplico la fuerza? ¿En cada tic del motor un poco en función del tiempo transcurrido? Realmente no he trabajado con box2d anteriormente.
MartinTeeVarga
Suena así funcionará bien, dejando que la gravedad se encargue del resto. Hay algunas formas diferentes de manejar la fuerza. Probablemente sería en cada tic del motor, según el tiempo transcurrido como usted dice. Serían fuerzas de impulso, es decir, momentáneas para ese marco. Consulte esta pregunta para obtener más información (esto es lo mismo incluso si no está usando Cocos2D como en la pregunta).
MichaelHouse