Як зробити так, щоб транспортний засіб рухався до точки і зупинявся без перенапруження або коливань?


9

Гаразд, вважайте, у нас транспортний засіб, подібний до того, який я описав у своїй відповіді на це питання , з 2D положенням, швидкістю, кутовою швидкістю та перетягуванням / тертям. Він може прискорюватись і вибиватися на змінну кількість, але не зупинятись мертвим або миттєво досягати максимальної швидкості. Як я можу змусити його рухатися до певної точки і зупинятися - у найшвидший час - без перенапруження чи коливання?

Я думав про щось на кшталт:

  • повернути до цільової позиції.
  • прискорити
  • дивіться 1 галочку вперед, запитуючи "Якби я застосував наступні галочки на перервах, чи переведу я ціль?"
  • Якщо це перевищить, застосуйте перерви зараз на деяку кількість.

Я впевнений, що це вирішена проблема, і, мабуть, є кращий метод, ніж той, який я описав.

Відповіді:


4

1
Чудово підходить для боїд або космічних кораблів, але щоб застосувати їх до фізики транспортних засобів, ви повинні інтерпретувати отриманий вектор, і ви знову повертаєтесь до початкової проблеми.
tenpn

3

Використовуючи підрахунок, якщо ви знаєте свою швидкість і максимальну швидкість уповільнення, то ви можете знати свою мінімальну відстань зупинки. Зважаючи на це, ви можете точно знати, коли потрібно застосувати гальмо (помилки округлення / квантування), щоб зупинитися на певній точці.

Тепер, сподіваюся, хтось кращий з математики, ніж я, опублікує фактичну формулу ...


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

Так, цей метод все ще корисний, навіть якщо ви ставите це як проблема системи управління, тому що розуміння градієнтів, що беруть участь, повинно допомогти уникнути нестабільності або коливань при вимірюванні помилок.
Кілотан


1

Іноді при розробці ігор потрібно брати ярлики. Ярлик тут називається імпульсом, який, фізично кажучи, є дуже великою силою, прикладеною за дуже короткий час. Замість того, щоб інтегрувати його з часом, ви просто застосуєте його до параметра як пряму зміну: встановіть швидкість у 0.

Питання: ви хочете скористатися ярликом чи ні?


2
Я не переживаю за те, щоб брати ярлики, якщо гравцеві це непомітно, але якби автомобіль міг зупинитися мертвим на місці, це виглядало б дуже дивно.
Iain

1
Це, безумовно, вірно, однак це допомагає зупинитися саме на тій точці, до якої ви хочете, щоб це відбулося після уповільнення, тим самим уникаючи складного обчислення і занадто багато разів діліть свій крок часу.
ADB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.