Suponha que você tenha um objeto flutuando livremente no espaço. Você tem um vetor para o qual deseja apontar esse objeto e um vetor que representa a direção em que está voltado. A partir desses dois, é possível obter a rotação (matriz, quaternion, qualquer que seja) que representa a mudança na orientação para alinhar os dois vetores.
Se você tem apenas a capacidade de aplicar torque (derivada da velocidade angular) ao seu objeto, o que é um bom algoritmo para aplicar o torque ao longo do tempo que não supera / ultrapassa o destino?
(Nesse caso, é uma nave espacial que deseja se orientar automaticamente na direção da viagem usando propulsores. Roll é irrelevante.)
physics
orientation
Karantza
fonte
fonte
Respostas:
Isso pode ser tratado como no caso semelhante da aceleração linear.
Primeiro fato a ser observado: como o navio começa com uma velocidade angular de zero, e você deseja que ele termine com uma velocidade angular de zero, isso significa que a mudança total na velocidade deve ser igual a zero.
A partir disso, podemos ver que a integral da aceleração ao longo do tempo deve ser igual a zero - deve haver exatamente tanta aceleração positiva quanto a aceleração negativa.
Portanto, sua solução, seja ela qual for, deve ser restrita a essa propriedade: Aceleração "total" igual para frente e para trás.
Aqui está o seguinte o formato da sua aceleração ao longo do tempo:
Olhando para isso, existem tantas formas e formatos possíveis em que sua aceleração pode estar! Vamos fazer algumas suposições para o formato de aceleração que você deseja, a fim de fornecer uma resposta fácil / concisa.
Por uma questão de resposta simples, terei a aceleração em um dos três estados: para frente, para trás ou zero. Para frente e para trás terão a mesma magnitude e os estados podem ser trocados instantaneamente. (não há aceleração gradual da aceleração)
Você pode encontrar a alteração na distância para uma determinada aceleração durante um determinado período de tempo com esta equação:
A solução mais simples aqui seria acelerar até chegar ao ponto médio e desacelerar o resto do caminho.
Tomaremos
P
como a distância total que você deseja mover:Então, basicamente:
a
parasqrt(P/a)
unidades de tempo (unidades baseadas em suas unidades para aceleração)Esta não é a única solução. Você chegará lá no menor tempo possível (
2*sqrt(P/a)
). Mas e se você quiser uma versão mais descontraída?Nesse caso, você pode acelerar 1/3 do caminho, desacelerar pelo 1/3 e desacelerar o resto do terceiro. Ou 1/4 da costa por 1/2, desacelere 1/4 também.
Ou talvez você possa acelerar por um período fixo e, em seguida, desacelerar por um período fixo, mas espere até chegar à posição exata antes de começar a desacelerar.
fonte