Jak sprawić, aby pojazd ruszył do punktu i zatrzymał się bez przeregulowania lub oscylacji?

9

Ok, więc rozważmy, że mamy pojazd podobny do opisanego w mojej odpowiedzi na to pytanie , z pozycją 2D, prędkością, prędkością kątową i oporem / tarciem. Może przyspieszać i przebijać się o różną ilość, ale nie może natychmiast zatrzymać martwego lub osiągnąć maksymalnej prędkości natychmiast. Jak mogę sprawić, aby przesunął się do określonego punktu i zatrzymał - w możliwie najkrótszym czasie - bez przeregulowania lub oscylacji?

Myślałem o czymś takim:

  • skręcić w kierunku pozycji docelowej.
  • przyśpieszyć
  • spójrz 1 zaznacz przed siebie, pytając „Gdybym zastosował przerwy w następnym tiku, czy przekroczyłbym cel?”
  • Jeśli to się przekroczy, zastosuj teraz przerwy o pewną kwotę.

Jestem pewien, że jest to rozwiązany problem i istnieje prawdopodobnie lepsza metoda niż ta, którą opisałem.

Iain
źródło

Odpowiedzi:

3

Korzystając z rachunku różniczkowego, jeśli znasz swoją prędkość i maksymalną prędkość hamowania, możesz poznać swoją minimalną drogę hamowania. Mając to na uwadze, możesz dokładnie wiedzieć, kiedy musisz zwolnić hamulce (pomijając błędy zaokrąglania / kwantyzacji), aby zatrzymać się w pewnym momencie.

Mam nadzieję, że ktoś lepszy w matematyce ode mnie opublikuje formułę ...

Kylotan
źródło
2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationZakłada się jednak, że opóźnienie jest stałe, co w zależności od głębokości symulacji może nie mieć miejsca. Poszedłbym z rozwiązaniem Ranieri. (niestety, to spowolnienie DIV, nie mul)
tenpn
Tak, ta metoda jest nadal przydatna, nawet jeśli ujęjesz ją w problem z układami sterowania, ponieważ zrozumienie zaangażowanych gradientów powinno pomóc w uniknięciu niestabilności lub oscylacji w pomiarze błędu.
Kylotan
1

Czasami podczas tworzenia gry musisz używać skrótów. Skrót tutaj nazywa się Impulsem, który fizycznie jest bardzo dużą siłą przyłożoną w bardzo krótkim czasie. Zamiast integrować go w czasie, po prostu zastosujesz go do parametru jako bezpośrednią zmianę: ustaw prędkość na 0.

Pytanie brzmi: czy chcesz użyć skrótu, czy nie?

ADB
źródło
2
Nie martwię się o korzystanie ze skrótów, jeśli są niewidoczne dla gracza, ale jeśli pojazd mógłby zatrzymać się martwy na miejscu, wyglądałoby to bardzo dziwnie.
Iain
1
To z pewnością prawda, jednak pomaga zatrzymać się dokładnie w punkcie, w którym chcesz to zrobić po dekelaryzacji, unikając w ten sposób skomplikowanych obliczeń i zbyt wiele razy dzieląc swój czas.
ADB