Podążanie za obiektem w przestrzeni 2D

Podążanie za obiektem (np. kursorem), od punktu do punktu, inaczej mówiąc: interpolacja liniowa.

Ostatnio zauważyłem, że wiele osób ma problem z dość prostym do rozwiązania problemem: ruchu obiektu do określonego punktu (np. do kursora myszy), całość może też być wykorzystana w np. podążaniu za obiektem.

W tym krótkim wpisie pokażę Wam jak takie coś wykonać na przykładzie programu w SFML, gdzie koło podąża za kursorem myszy (demo jest na samym końcu wpisu)

 

Trochę matematyki…


Krótki wstęp teoretyczny (mam nadzieję, że tak prostych rzeczy nie muszę specjalnie długo tłumaczyć).

Niewiele osób zdaje sobie sprawę, że płynne poruszanie obiektu z punktu do punktu to nic innego jak wektor, dokładnie ten sam, który poznaje się w liceum.

linear

Co zrobić aby uzyskać wektor przemieszczenia od punktu A do punktu B? Dokładnie! Musimy od współrzędnych punktu B odjąć współrzędne punktu A.

Aby uzyskać płynne poruszanie się od punktu A do punktu B, to należy przemieścić obiekt o w*delta_time (delta_time to przyrost klatek na sekundę). Jednak w tej postaci przesunięcie nie będzie stałe tzn. im mniejsza odległość od celu, tym mniejsza prędkość.

Jeżeli zależy nam na zlikwidowaniu tego zjawiska to musimy otrzymany wektor znormalizować, tzn sprawić że jego wartości x/y będą znajdowały się w przedziale [-1,1]. Normalizacja odbywa się przez podzielenie składowych wektora przez jego początkową długość.

 

Demo


Demo napisane w SFML przedstawiające jak napisać kod, w którym obiekt porusza się w stronę kursora.

@filipekczek7 pokazał jak zrobić poruszanie się obiektu do punktu tutaj.

 

Code ON!