LERP - interpolacja liniowa
Dałem tę odpowiedź na podobny problem kilka dni temu, ale proszę bardzo:
Interpolacja liniowa to funkcja, która daje liczbę między dwiema liczbami w zależności od postępu. Możesz faktycznie uzyskać punkt między dwoma punktami.
Wielka formuła - jak ją obliczyć
Ogólna formuła LERP została podana przez pu = p0 + (p1 - p0) * u
. Gdzie:
- pu: numer wyniku
- p0: numer początkowy
- p1: ostatnia liczba
- u: Postęp. Podawany jest w procentach, od 0 do 1.
Jak uzyskać procent
Być może zastanawiasz się: „Jak mogę uzyskać ten odsetek !?”. Nie martw się To jest tak: ile czasu zajmie podróż do ukończenia wektora startowego? Ok, podziel to przez czas, który już minął. To da ci procent.
Zobacz coś takiego: percentage = currentTime / finalTime;
Obliczanie wektorów
Aby uzyskać wynikowy wektor, wystarczy zastosować formułę dwa razy, jeden dla komponentu X i jeden dla komponentu Y. Coś takiego:
point.x = start.x + (final.x - start.x) * progress;
point.y = start.y + (final.y - start.y) * progress;
Obliczanie zmiennego czasu
Możesz chcieć, aby twoje punkty podróżowały z prędkością 0,5 punktu, tak? Powiedzmy, że dłuższy dystans zostanie pokonany w dłuższym czasie.
Możesz to zrobić w następujący sposób:
Uzyskaj długość odległości Do tego potrzebne będą dwie rzeczy. Uzyskaj wektor odległości, a następnie przekształć go w wartość długości.
distancevec = final - start;
distance = distancevec.length();
Mam nadzieję, że znasz matematykę wektorów. Jeśli nie, możesz obliczyć długość wektora za pomocą tego wzoru d = sqrt(pow(v.x, 2) + pow(v.y, 2));
.
Poświęć czas i zaktualizuj czas finałowy. Ten jest łatwy. Jeśli chcesz, aby każdy tyk dostał 0,5 długości, musimy tylko podzielić i ustalić, ile mamy tyknięć.
finalTime = distance / 0.5f;
Gotowy.
UWAGA: Być może nie jest to zamierzona prędkość, ale jest to właściwe. więc masz ruch liniowy, nawet przy ruchach ukośnych. Jeśli chcesz zrobić x + = 0,5f, y + = 0,5f, to przeczytaj książkę wektorową i ponownie sprawdź swoje plany.
goal_dist
swójif
stan?