Supposons que vous ayez un objet flottant librement dans l'espace. Vous avez un vecteur vers lequel cet objet doit pointer, et un vecteur représentant la direction à laquelle il fait actuellement face. De ces deux, vous pouvez obtenir la rotation (matrice, quaternion, peu importe) qui représente le changement d'orientation pour amener les deux vecteurs dans l'alignement.
Si vous avez uniquement la possibilité d'appliquer un couple (dérivé de la vitesse angulaire) à votre objet, quel est un bon algorithme pour appliquer un couple dans le temps qui ne dépassera / ne dépassera pas la destination?
(Dans ce cas, c'est un vaisseau spatial qui veut s'orienter automatiquement dans le sens du déplacement à l'aide de propulseurs. Le roulis n'est pas pertinent.)
la source
Réponses:
Cela peut être géré comme le cas similaire pour l'accélération linéaire.
Premier fait à noter: comme le navire commence avec une vitesse angulaire nulle, et que vous voulez qu'il se retrouve avec une vitesse angulaire nulle, cela signifie que le changement total de vitesse doit être égal à zéro.
De cela, nous pouvons voir que l'intégrale de l'accélération dans le temps doit être égale à zéro - il doit y avoir exactement autant d'accélération positive qu'il y a d'accélération négative.
Par conséquent, votre solution, quelle qu'elle soit, doit être contrainte à cette propriété: Accélération "totale" égale vers l'avant et vers l'arrière.
Voici ce que devrait suivre la forme de votre graphique d'accélération dans le temps:
En regardant cela, il y a tellement de formes et de formes possibles que votre accélération pourrait être! Faisons quelques hypothèses sur la forme d'accélération que vous souhaitez, afin de donner une réponse simple / concise.
Pour une réponse simple, je vais avoir l'accélération dans l'un des trois états: avant, arrière ou zéro. En avant et en arrière seront de même ampleur, et les états peuvent être commutés instantanément. (il n'y a pas d'accélération progressive de l'accélération)
Vous pouvez trouver le changement de distance pour une accélération donnée sur une période de temps donnée avec cette équation:
La solution la plus simple serait d'accélérer jusqu'à ce que vous atteigniez la mi-course, puis de ralentir le reste du chemin.
Nous prendrons
P
comme distance totale que vous souhaitez parcourir:Donc en gros:
a
dessqrt(P/a)
unités de temps (unités basées sur vos unités d'accélération)Ce n'est pas la seule solution. Il vous y amènera dans les plus brefs délais (
2*sqrt(P/a)
). Mais que faire si vous voulez une version plus détendue?Dans ce cas, vous pouvez accélérer 1/3 du chemin, ralentir pour le 1/3 et ralentir le reste du tiers. Ou 1 / 4ème, côte pour 1/2, ralentissez également 1 / 4ème.
Ou peut-être pourriez-vous accélérer pendant une durée fixe, puis décélérer pendant une durée fixe, mais attendez d'arriver à la position exacte avant de commencer la décélération.
la source