5 votos

¿Cómo simular inestabilidad rotacional?

Estoy tratando de simular (para un juego educativo) el conocido efecto de que los objetos en rotación con tres nonequal los momentos de inercia son inestables cuando se hace girar alrededor del eje central.

Algunas de las explicaciones de este efecto se dan a continuación:

La mayoría de esta matemática es, por desgracia, por encima de mi cabeza (aunque estoy tratando). Pero para mis propósitos, me necesitan más que simplemente "es la forma de un oscilador armónico" o "no es un oscilador armónico"; necesito reproducir el efecto en la simulación.

He intentado esto en el uso de la Unidad integrada del motor de física aquí:

Usted puede intentar usted mismo si usted tiene (o instalar) la libre Unidad de plug-in; se muestra un 1x4x7 bloque de densidad uniforme, rotando sobre su eje central. Con el "Poke" botón usted puede inducir a una pequeña azar par. Empujar el bloque repetidamente puede golpear su eje torcido -, pero una vez que deje de meter, el eje se mantiene en su lugar, y gira constantemente alrededor de cualquier dirección a lo que es. Bajo ninguna circunstancia he sido capaz de ponerla en la secadora (como se ve en este video de una baraja de cartas, o este de algunas de simulación).

Y su falta de volteretas hace perfecto sentido para mí. Como yo lo entiendo, el estado de un cuerpo rígido se define por su posición, la velocidad, la orientación y la velocidad angular. En ausencia de cualquier fuerza externa, la velocidad y la velocidad angular debe permanecer sin cambios. La velocidad Angular puede ser descrito como un eje y una velocidad de rotación. Así que, sin fuerzas externas que actúan sobre él, ¿cómo puede el eje de rotación posiblemente el cambio?

Claramente hay algo que falta tanto de mi entendimiento intuitivo, y desde el motor de física dentro de la Unidad. No te concentres demasiado en el último; yo puedo programar mi propio motor de física, si yo entiendo lo que se debe hacer. ¿Cuál es la clave de bits que me falta, que explica cómo (y de qué manera) el eje de rotación se puede cambiar sin ninguna fuerza externa? En pseudocódigo, simple de Euler hacia adelante integración estilo, ¿cómo se podía simular esto?

4voto

benrg Puntos 1163

$\vec\omega = I^{-1} \vec L$, e $\vec L$ es constante en ausencia de fuerzas externas. El bit que creo que falta es que el $I$ gira con el cuerpo rígido, de manera que no es constante, en general, y tampoco es $\vec\omega$.

He jugado en línea con su ejemplo, y la velocidad angular, parece siempre permanece constante cuando no estoy metiendo el bloque, lo cual es consistente con un tensor de inercia que es un escalar múltiples de la identidad. Yo nunca he usado la Unidad, pero parece apoyo arbitraria de los tensores de inercia a través de Rigidbody.inertiaTensor y Rigidbody.inertiaTensorRotation, así que tal vez usted sólo debe fijar aquellos adecuadamente.

Si usted termina encima de tener que lanzar su propia física, he aquí algunos ingenuos, no han sido probados y potencialmente mal pseudocódigo:

const double time_step = ...;
const Quaternion L = {0, Lx, Ly, Lz};  // angular momentum
const double K1 = 1/I1, K2 = 1/I2, K3 = 1/I3;  // reciprocals of principal-axis moments of inertia; no idea if there's a standard letter for this
Quaternion orientation = {1, 0, 0, 0};
while (1) {
    Quaternion transformed_L = conjugate(orientation) * L * orientation;
    Quaternion transformed_omega = {0, K1 * transformed_L.i, K2 * transformed_L.j, K3 * transformed_L.k};
    Quaternion omega = orientation * transformed_omega * conjugate(orientation);
    orientation = quaternion_exp(time_step * omega) * orientation;
    // ... or orientation = normalize((1 + time_step * omega) * orientation);
    // ... or orientation = normalize((1 + time_step * omega + 0.5 * (time_step * omega)**2) * orientation);
    output(orientation);
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X