Widziałem wiele samouczków i książek 2d, w których poprzednia pozycja obiektu była przechowywana w stanie zamiast wektora prędkości. Prędkość jest następnie obliczana dla każdej klatki jako różnica między pozycjami.
Jakie są zalety tej metody?
Widziałem wiele samouczków i książek 2d, w których poprzednia pozycja obiektu była przechowywana w stanie zamiast wektora prędkości. Prędkość jest następnie obliczana dla każdej klatki jako różnica między pozycjami.
Jakie są zalety tej metody?
Odpowiedzi:
Nie znając dokładnie samouczków lub książek, które przeczytałeś, oto co mogę ci powiedzieć.
Mówiąc dokładniej w zakresie definicji fizyki: kierunek wektora jest obliczany jako różnica między bieżącą pozycją a ostatnią pozycją. Prędkość wektora jest równa tej podzielonej przez czas, który upłynął podczas przechodzenia z jednej pozycji do drugiej. Zobacz: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity
Jednakże, gdy upływający czas uważa się za ogólną „1 ramkę”, tj. Od ostatniej ramki do prądu, wówczas prędkość wektora i kierunek wektora stają się takie same. W pseudokodzie:
direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time
Ogólnie rzecz biorąc, głównym powodem przechowywania pozycji w ostatniej ramce i uzyskania pozycji w bieżącej ramce jest to, że może to być jedyny lub najtańszy sposób poznania zaktualizowanego kierunku (a zatem zaktualizowanej prędkości), tzn. kierunek ruchu w bieżącej ramce.
Załóżmy, że przechowujesz kierunek (lub nawet prędkość) w danej ramce. W następnej ramce jedynym sposobem sprawdzenia, czy kierunek (a nawet prędkość) zmienił się, jest ponowne obliczenie. Powodem jest to, że poprzedni kierunek lub poprzednia prędkość nie informują o bieżącym kierunku ani bieżącej prędkości w przypadku zmiany ruchu z jednej klatki na drugą.
Teraz, biorąc pod uwagę samouczki, o których wspomniałeś w komentarzu do swojego pytania, staje się ono jeszcze wyraźniejsze. W jednym z samouczków autorzy mówią, że:
Teraz nauczmy naszą cząsteczkę, jak poruszać się dzięki integracji Verlet. To tylko fantazyjny sposób powiedzenia, że dowiemy się, jak szybko porusza się nasza cząsteczka, porównując jej położenie w tej klatce z pozycją ostatniej klatki. Dlaczego? Ponieważ daje nam to domyślną prędkość - każda zmiana aktualnej pozycji cząstki automatycznie zaktualizuje jej prędkość
Tak więc, jak widać, zapisywanie pozycji ostatniej klatki pozwala, jak powiedziałem powyżej, zaktualizowane obliczenie prędkości w bieżącej klatce, gdy obiekt (w samouczku jest cząstką) zmienia pozycję. Jeśli zapisałeś tylko kierunek lub prędkość w ostatniej klatce, nie będziesz w stanie zaktualizować jej tak łatwo w przypadku zmiany pozycji z poprzedniej na bieżącą. Dlatego, jak wskazano również w innym samouczku, z którym się łączysz, zapisywanie poprzedniej pozycji pozwala na automatyczną aktualizację prędkości w przypadku zmiany pozycji.