Me pregunto si alguien tiene una forma elegante de calcular el siguiente escenario.
Tengo un objeto de (n) número de cuadrados, formas aleatorias, pero fingiremos que son todos rectángulos.
No estamos tratando con la gravedad, así que considera el objeto en el espacio, desde una perspectiva de arriba hacia abajo. Estoy aplicando una fuerza al objeto en un cuadrado específico (como se ilustra a continuación).
¿Cómo calculo el ángulo de rotación, en función de la fuerza que se aplica, en la ubicación que se aplica? Si se aplica en el cuadrado central, iría derecho. ¿Cómo debería comportarse cuanto más me muevo desde el centro? ¿Cómo calculo la velocidad de rotación?
Respuestas:
Estás tratando de calcular el par. El par depende de la fuerza aplicada F, el punto de aplicación y el centro de masa del objeto.
1) Centro de misa . Definir el centro de masa del objeto.
2) Punto de aplicación : defina el punto en el que actúa la fuerza.
3) Brazo de momento : la distancia entre los dos puntos definidos anteriormente.
4) Fuerza angular : Divida su fuerza F en dos vectores ortogonales, uno Paralelo a la línea en 3) y uno Perpendicular. El componente paralelo no afecta el momento angular. El perpendicular lo hace. Puede calcular el componente paralelo por proyección vectorial. Puede restar eso del original para obtener el componente perpendicular. En pseudocódigo (
dot
significa producto de punto)5) Par : El componente perpendicular de la fuerza multiplicado por la longitud del brazo del momento.
Para ir del par a la velocidad angular:
1) Momento de inercia : una definición de cuánta inercia rotacional tiene un objeto dado. Por ejemplo, se necesita más torque para rotar una barra larga que una esfera de la misma masa. Si no le preocupa el realismo, puede fingir que el momento de inercia es relativo a la masa, o puede ignorar por completo la forma y la masa del objeto.
2) aceleración angular :
3) Velocidad angular : la velocidad angular seguirá aumentando mientras se aplique el par. Entonces, una fórmula será aproximadamente "Velocidad angular en el momento T es la suma acumulativa de la aceleración angular hasta T ". Esto se expresa en pseudocódigo como
fuente
orientation += angularVelocity * elapsedSeconds
está mal porque sobreestima la velocidad a lo largo del paso del tiempo, lo que significa que diferentes velocidades de cuadro darán diferentes orientaciones. Una fórmula adecuada sería:float oldVelocity = angularVelocity; angularVelocity += angularAcceleration * elapsedSeconds; orientation += 0.5f * (angularVelocity + oldVelocity) * elapsedSeconds;
. Además, como no hay gravedad, sugiero utilizar en su lugar "centro de masa". +1 por la muy buena explicación sin embargo.Si las fuerzas no son demasiado fuertes, es mucho más fácil simular la rotación utilizando múltiples puntos y resortes que los conectan. en ese caso, simplemente asume que su forma consiste en múltiples puntos conectados por resortes. cada punto representa la masa y todo lo demás en forma tiene una masa igual a cero.
en la imagen de arriba el punto negro representa masas y la línea roja representa resortes. luego, para aplicar la fuerza, solo tienes que aplicarla al punto más cercano y verás que tu objeto rotará como quieras. Para que su forma se vea como una estructura sólida, es mejor definir resortes con un alto valor de amortiguación y un alto valor k.
fuente