Dynamiczna zmiana kąta poruszania obiektem

0

Cześć!
Mam następujący problem: piszę grę w której pewien obiekt powinien poruszać się wyznaczoną drogą. Droga może mieć zakręty. W grze wykorzystuję mapę kafelkową.
Obiekt przechowuje informację o kierunku poruszania się jako kąt (float direct;). Porusza się z wyznaczoną prędkością podaną w pikselach na sekundę.
Teraz chciałbym, żeby obiekt (na zdjęciu ludzik) zmienił dynamicznie kierunek swojej podróży tak, by z początkowej pozycji przy zmianie kafelka dotarł na środek drugiego kafelka po łuku.

Mam więc pytanie jak dynamicznie zmieniać kąt kierunku poruszania się, by obiekt zrobił ładny łuk a nie gwałtownie zmienił kierunek z 90 stopni na 0 stopni?
Problemem może być to, że co jakiś czas mogą pojawić się rozbieżności w pozycji obiektu na kafelku i może on być np. trochę niżej na kafelku lub trochę wyżej (stąd dwie przykładowe strzałki na obrazku).

Domyślam się, że istotne tu będą następujące dane:
odległość na osi X
odległość na osi Y
różnica w zmianie kąta kierunku poruszania się (między obecnym a tym, do którego dążę)
i chyba szybkość poruszania się.

Zależy mi również, by nie wykorzystywać tutaj informacji o pozycji startowej (początkowej - przy zmianie kafelka), tylko bazować na aktualnej pozycji obiektu, jego aktualnej odległości od celu i różnicy kąta.
Czy możecie mi pomóc jak to rozwiązać?

Całość problemu ilustruje zamieszczony obrazek (mam nadzieję, że jest czytelny).
user image

Z góry serdecznie dziękuję.

0

Być może to co zaproponuje to przerost formy nad treścią ale możesz użyć interpolacji wielomianowej. Z jej pomocą wyznaczasz współczynniki wielomianu który opisze ci ruch przez punkty pośredni jakie tam sobie wyznaczysz do punktu docelowego.

0
lemonov napisał(a):

Być może to co zaproponuje to przerost formy nad treścią ale możesz użyć interpolacji wielomianowej. Z jej pomocą wyznaczasz współczynniki wielomianu który opisze ci ruch przez punkty pośredni jakie tam sobie wyznaczysz do punktu docelowego.

To chyba rzeczywiście przerost formy nad treścią ;-)

0

Problem sprowadza się do równania ruchu po okręgu (lub jego wycinku) w współrzędnych biegunowych.

0

Wg mnie najprościej zrobić to na http://pl.wikipedia.org/wiki/Krzywa_B%C3%A9ziera
Przyjmij jako:

  • P0 - pozycje startową
  • P1,P2 - środek kwadratu w którym ma być zakręt
  • P2 - pozycja docelowa

1 użytkowników online, w tym zalogowanych: 0, gości: 1