Как сделать так, чтобы транспортное средство двигалось к точке и останавливалось без перерегулирования или колебаний?

9

Итак, рассмотрим, что у нас есть транспортное средство, подобное тому, которое я описал в своем ответе на этот вопрос , с 2D-положением, скоростью, угловой скоростью и сопротивлением / трением. Он может ускоряться и ломаться на переменную величину, но не может мгновенно остановиться или достичь максимальной скорости. Как я могу заставить его двигаться в определенную точку и остановиться - в кратчайшие возможные сроки - без колебаний или колебаний?

Я думал что-то вроде:

  • поверните к целевой позиции.
  • ускорять
  • посмотрите на 1 галочку вперед и спросите: «Если бы я применил разрывы на следующей галочке, я бы не попал в цель?»
  • Если произойдет сбой, примените разрывы сейчас на некоторое количество.

Я уверен, что это решенная проблема, и, вероятно, есть лучший метод, чем тот, который я описал.

Iain
источник

Ответы:

4

Поведение рулевого управления для автономных персонажей . Проверьте поиск и прибытие.

BRaffle
источник
1
Отлично подходит для боидов или космических кораблей, но чтобы применить их к физике транспортных средств, вам нужно интерпретировать полученный вектор, и вы снова вернетесь к исходной проблеме.
10
3

Используя исчисление, если вы знаете свою скорость и максимальную скорость замедления, то вы можете узнать минимальное расстояние остановки. Имея это в виду, вы можете точно знать, когда вам нужно применить тормоза (кроме ошибок округления / квантования), чтобы остановиться в определенной точке.

Теперь, надеюсь, кто-то лучше в математике, чем я опубликую фактическую формулу ...

Kylotan
источник
2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationОднако это предполагает, что ваше замедление является постоянной величиной, что может не соответствовать действительности. Я бы пошел с решением Раньери. (Ой, извините, это замедление DIV, а не мул)
tenpn
Да, этот метод все еще полезен, даже если вы рассматриваете его как проблему систем управления, потому что понимание вовлеченных градиентов должно помочь избежать нестабильности или колебаний в измерении ошибок.
Kylotan
1

Иногда, при разработке игр, вам нужно использовать ярлыки. Сокращение здесь называется Импульсом, который, физически говоря, является очень большой силой, приложенной за очень короткое время. Вместо того, чтобы интегрировать его по времени, вы просто применяете его к параметру как прямое изменение: установите скорость в 0.

Вопрос в том, хотите ли вы использовать ярлык или нет?

АБР
источник
2
Я не беспокоюсь о том, чтобы использовать ярлыки, если он невидим для игрока, но если транспортное средство может остановиться на месте, это будет выглядеть очень странно.
Иан
1
Это, безусловно, верно, однако это помогает точно остановиться в той точке, к которой вы хотите, после замедления, что позволяет избежать сложных вычислений и слишком часто делить шаг по времени.
АБР