Gostaria de saber se alguém tem uma maneira elegante de calcular o cenário a seguir.
Eu tenho um objeto de (n) número de quadrados, formas aleatórias, mas vamos fingir que são todos retângulos.
Como estamos lidando sem gravidade, considere o objeto no espaço, de uma perspectiva de cima para baixo. Estou aplicando uma força ao objeto em um quadrado específico (como ilustrado abaixo).
Como faço para calcular o ângulo de rotação, com base na força a ser aplicada, no local a ser aplicado. Se aplicado no quadrado central, seguiria em frente. Como deve se comportar quanto mais me afastar do centro? Como calculo a velocidade rotacional?
Respostas:
Você está tentando calcular o torque. O torque depende da força aplicada F, do ponto de aplicação e do centro de massa do objeto.
1) Centro de massa . Defina o centro de massa do objeto.
2) Ponto de Aplicação : Defina o ponto em que a força atua.
3) Braço do momento : a distância entre os dois pontos definidos acima.
4) Força angular : divida sua força F em dois vetores ortogonais, um paralelo à linha em 3) e um perpendicular. O componente paralelo não afeta o momento angular. O perpendicular faz. Você pode calcular o componente paralelo por projeção vetorial. Você pode subtrair isso do original para obter o componente perpendicular. No pseudocódigo (
dot
significa produto escalar)5) Torque : O componente perpendicular da força multiplicado pelo comprimento do braço do momento.
Para passar do torque para a velocidade angular:
1) Momento de inércia : Uma definição de quanta inércia rotacional um determinado objeto possui. Por exemplo, é preciso mais torque para girar uma barra longa do que uma esfera da mesma massa. Se você não está preocupado com o realismo, pode fingir que o momento de inércia é relativo à massa ou pode ignorar completamente a forma e a massa do objeto.
2) Aceleração angular :
3) Velocidade angular : a velocidade angular continuará aumentando enquanto o torque estiver sendo aplicado. Portanto, uma fórmula será aproximadamente "Velocidade angular no momento T é a soma cumulativa da aceleração angular até T. " Isso é expresso em pseudocódigo como
fonte
orientation += angularVelocity * elapsedSeconds
está errada porque superestima a velocidade ao longo do tempo, o que significa que diferentes taxas de quadros fornecerão orientações diferentes. A fórmula adequada seria:float oldVelocity = angularVelocity; angularVelocity += angularAcceleration * elapsedSeconds; orientation += 0.5f * (angularVelocity + oldVelocity) * elapsedSeconds;
. Além disso, como não há gravidade, sugiro usar o "centro de massa". +1 para a explicação muito boa.se as forças não são muito fortes, é muito mais fácil simular a rotação usando vários pontos e molas conectando-os. nesse caso, você apenas assume sua forma consiste em vários pontos conectados por molas. cada ponto representa massa e qualquer outra coisa em forma tem massa igual a zero.
na figura acima, o ponto preto representa massas e a linha vermelha representa as molas. então, para aplicar a força, basta aplicá-la ao ponto mais próximo e você verá que seu objeto girará da maneira que desejar. Para fazer com que sua forma pareça uma estrutura sólida, é melhor definir molas com alto valor de amortecimento e alto valor de k.
fonte