Na końcu tych wspaniałych slajdów autor porównuje wszystkich zaprezentowanych integratorów. Tak czy inaczej, wszystkie one nie wystarczają, z wyjątkiem ulepszonej integracji Eulera i integracji Runge Kutta 4 , które oba przeszły wszystkie testy.
Przypuszczam, że powinienem wspomnieć, że pracuję nad grą 2D, która nie wymaga zbyt dużej fizyki. Jestem tylko ciekawy, gdzie udoskonalona integracja Eulera nie byłaby wystarczająca, a zamiast niej musiałaby zostać użyta RK4.
Moja gra składa się głównie z prostej grawitacji (skakanie i spadanie), ruchu wzdłuż osi X i Y oraz zderzenia ramki ograniczającej. Czy warto wdrożyć RK4, czy też ulepszony Euler byłby wystarczający? Widzę wiele dyskusji, w których karani są użytkownicy Euler Integration, ale z tego, co widzę, ulepszony Euler jest równoważny w prostych sprawach 2D. Wyobrażam sobie, że byłoby to również szybsze.
źródło
Odpowiedzi:
Osobiście wolę Velocity Verlet dla większości symulacji. Z mojego doświadczenia z tą metodą jest ona całkiem odpowiednia do dość sztywnych równań. Wygląda na to, że ta „ulepszona metoda Eulera” jest dość podobna do metody Velocity Verlet i opiera się na klasie metod integracji znanych jako predykcyjno-korektor . W dzisiejszych czasach możesz przeczytać wiele rzeczy o tych metodach, zaczynając od „Dużych kroków w symulacji ubrań” Davida Baraffa, w których moc ukrytych metod naprawdę świeci. Ich wadą jest to, że:
Więc jeśli nie jesteś guru matematyki, możesz utknąć w palcach. Po prostu eksperymentuj z dowolną metodą, którą chcesz, a następnie zadowalaj się tą, która wydaje się najlepiej dla Ciebie. Proste nie zawsze jest lepsze, ale dla interaktywnych klatek znam tylko jedno słowo: kompromis.
Niektóre dodatkowe zasoby, na które warto spojrzeć:
Jakobsen jest rodzajem geniuszu, jeśli chodzi o wymyślenie tak prostego pomysłu na pretensjonalny problem (jego specjalizacja to Kryptografia, jeśli się nie myli, ale udało mu się udowodnić matematyczną równoważność swojej metody z klasą iteracyjnego algorytmu Gaussa-Seidla, który jest zbieżny ). Dla uproszczenia przejdź do tego pierwszego, zanim zagłębisz się w ukryte metody.
PÓŹNA EDYCJA : Niedawno dostałem artykuł na temat używania jawnych integratorów do symulacji ciała miękkiego lub półsztywnego oraz tego, jaki jest ich wpływ na wydajność i jakość. Ten dokument powinien służyć jako przewodnik przy wyborze określonego integratora, w zależności od scenariusza.
źródło
P: Dlaczego warto korzystać z zaawansowanej Kutty Runge?
Odp .: Ponieważ jest to bardzo dokładne.
P: Dlaczego nie?
Odp .: Ponieważ tworzysz grę, a bardzo dokładny silnik fizyki nie ma znaczenia, musi być wystarczająco dobry, aby oszukać gracza.
Nawiasem mówiąc, jeśli masz duże tłumienie podczas kolizji, jak większość platformówek, prosty Euler jest w porządku.
Zdecydowanie zalecam, abyś w przeciwieństwie do kodu w prezentacji korzystał z ustalonej fizyki kroków, co pozwala zaoszczędzić trochę potencjalnych błędów i pozwala rozwiązać problem pozyskiwania lub utraty energii w bardzo prosty sposób. Po prostu znajdź środkowy punkt między jawną a niejawną integracją:
Prezentacja nie pokazuje, jak radzić sobie z kolizjami, aby obiekty nie wykraczały poza granice. Prostym rozwiązaniem tego problemu jest użycie wysokiej częstotliwości aktualizacji. Bardziej złożonym, ale potencjalnie lepszym rozwiązaniem jest przenoszenie obiektów z powrotem w momencie kolizji, dokładna implementacja zależy od pożądanego zachowania fizyki.
źródło
W prezentacji wystąpił błąd. Metoda określana przez prezentera jako „Improved Euler” jest w rzeczywistości metodą Velocity Verlet!
Zobacz tutaj, aby uzyskać bardziej wiarygodne źródło: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numerical_ode/node5.html
Te same równania są w Wikipedii .
Powszechną natychmiastową poprawą w stosunku do metody Eulera jest metoda Midpoint, którą prezenter prawdopodobnie miał na myśli, ale ostatecznie pomylił Velocity Verlet jako ulepszony Euler. Jedyną różnicą między metodą punktu środkowego i Velocity Verlet jest to, że prędkość jest średnią z ostatniego i następnego przyspieszenia, a nie tylko zależy od ostatniego przyspieszenia.
źródło