Comment faire avancer et arrêter un véhicule sans dépasser ni osciller?


9

Ok, alors considérons que nous avons un véhicule comme celui que j'ai décrit dans ma réponse à cette question , avec une position 2D, une vitesse, une vitesse angulaire et une traînée / friction. Il peut accélérer et casser d'une quantité variable, mais pas s'arrêter instantanément ou atteindre la vitesse de pointe instantanément. Comment puis-je le faire se déplacer vers un point particulier et s'arrêter - dans le temps le plus rapide possible - sans dépassement ni oscillation?

Je pensais à quelque chose comme:

  • tourner vers la position cible.
  • accélérer
  • regardez 1 tick en avant, demandant "Si j'appliquais les breaks au tick suivant, est-ce que je dépasserais la cible?"
  • S'il surpassait, appliquez maintenant les pauses d'un certain montant.

Je suis sûr que c'est un problème résolu et il existe probablement une meilleure méthode que celle que j'ai décrite.

Réponses:



3

En utilisant le calcul, si vous connaissez votre vitesse et votre taux de décélération maximal, vous pouvez connaître votre distance d'arrêt minimale. Dans cet esprit, vous pouvez savoir exactement quand vous devez appliquer les freins (erreurs d'arrondi / quantification mises à part) pour vous arrêter à un certain point.

Maintenant, j'espère que quelqu'un de meilleur en mathématiques que moi affichera la formule actuelle ...


2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationCependant, cela suppose que votre décélération est une constante, ce qui, selon la profondeur de votre simulation, peut ne pas être le cas. J'irais avec la solution de Ranieri. (whoops désolé c'est la décélération DIV, pas mul)
tenpn

Oui, cette méthode est toujours utile même si vous la définissez comme un problème de systèmes de contrôle, car la compréhension des gradients impliqués devrait aider à éviter l'instabilité ou l'oscillation dans la mesure d'erreur.
Kylotan


1

Parfois, dans le développement de jeux, vous devez prendre des raccourcis. Le raccourci ici est appelé une impulsion, qui, physiquement parlant, est une très grande force appliquée en très peu de temps. Au lieu de l'intégrer dans le temps, il vous suffit de l'appliquer au paramètre comme un changement direct: définissez la vitesse sur 0.

La question est: voulez-vous utiliser le raccourci ou non?


2
Je ne suis pas inquiet de prendre des raccourcis s'ils ne sont pas visibles par le joueur, mais si un véhicule pouvait s'arrêter net sur place, cela aurait l'air très étrange.
Iain

1
C'est certainement vrai, mais cela aide à s'arrêter précisément au point où vous le souhaitez après une décélaration, évitant ainsi un calcul complexe et ayant à diviser votre pas de temps trop de fois.
ADB
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.