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.
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.
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:
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:
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.
źródło