Fizyka 2D: zapamiętywanie poprzedniej pozycji a zapamiętywanie prędkości


9

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?


2
Czy możesz odnieść się do odnośnych samouczków dla kontekstu?
Anko,

Dzielę tę samą ciekawość Anko
dnk drone.vs.drones,

W tym samouczku wspomniano, że nazywa się to integracją Verleta. Znalazłem ten artykuł , w którym wyjaśniono zalety Verlet. Zasadniczo łatwiej jest poradzić sobie z kolizjami i złożonymi ograniczeniami.
Terzalo,

@Terzalo Zobacz zaktualizowaną wersję mojej odpowiedzi, aby zobaczyć, czy pomaga ona zrozumieć ogólną logikę konkretnego przypadku
MA

Odpowiedzi:


1

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.