Wenn Sie Dinge wie Physik in Spielen erstellen, benötigen Sie einen Integrator. Ich habe gesehen, dass die Verlet-Integration an mehreren Stellen eine großartige Alternative zur Euler-Integration ist. Zum Beispiel in dem berühmten Dokument von Thomas Jakobsen . In diesem Artikel schreibt Glenn Fiedler jedoch:
Anstatt Sie mit den zahlreichen verschiedenen Integratoren bekannt zu machen, gehe ich auf den Punkt und gehe direkt zu den Besten. Dieser Integrator wird als Runge Kutta Order 4-Integrator oder RK4 bezeichnet.
Es gibt also anscheinend keine Silberkugel. Was ist das Für und Wider der verschiedenen Integratoren? In Bezug auf Einfachheit, Geschwindigkeit, Genauigkeit, Stabilität usw. Welcher Integrator eignet sich am besten für welche Arten von Spielen? Wann würden Sie Verlet, RK4 oder andere verwenden? Sollten Sie jemals Euler verwenden?
Antworten:
Vor- und Nachteile beider Methoden:
RK4 Vorteile:
RK4 Nachteile:
Verlet Pros:
Verlet Nachteile:
Die Verwendung von übereinander hängt vom jeweiligen Szenario ab. Wenn Steifheit und große externe Kräfte und virtuelle Energien ein Problem darstellen, sollten Sie andere Methoden in Betracht ziehen, deren Beschreibung / Titel das "implizite" Wort enthält.
Hinweis einige Autoren / Bücher den Begriff semi-impliziter Euler für einen tatsächlichen expliziten Euler-Integrator verwenden, der als symplektische Euler-Methode (oder Euler-Cromer) bezeichnet wird, von der Verlet tatsächlich abgeleitet ist. Verlet wird von manchen auch als "Bocksprung-Methode" bezeichnet. Velocity Verlet und die Mittelpunktmethode sind seit einer Schätzung in einem Zeitschritt von ziemlich ähnlich
t + 0.5*dt
ist für einen Predictor-Corrector-ähnlichen Schritt erforderlich. IMEX-Methoden (implizit-explizit) werden auch verwendet, um zwei ähnliche, aber nicht identische Ansätze zu benennen: Trennen Sie die Berechnungen in steife und nicht steife Teile und verwenden Sie unterschiedliche Integratoren (explizit für nicht steife, implizit für steife) ODER lösen Sie nach die Geschwindigkeit mit einem impliziten Aktualisierungsschritt und eine explizite Aktualisierung der Position (dies ist eine hybride halbimplizite Methode, die in die IMEX-Methodenklasse fällt, da die steifen Teile die Beschleunigungsberechnung am meisten beeinflussen). Implizite Methoden sind umständlicher und erfordern die Lösung eines Systems simultaner nichtlinearer Gleichungen für die gesamte Konfiguration. Implizite Methoden werden für deformierbare Körper verwendet und normalerweise nicht für entkoppelte starre Körper.Wie in einem der Kommentare angegeben, sollten Sie Euler nicht verwenden, wenn Sie können. Verwenden Sie entweder die Midpoint-Methode, den semi-impliziten Euler oder auf die gleiche Kosten das Positions-Verlet. Alle haben eine etwas höhere Genauigkeit und deutlich mehr Stabilität als der explizite Euler-Integrator.
Empfohlene Mini-Vergleichslesung:
http://wiki.vdrift.net/Numerical_Integration
quelle
Euler-Implementierungen sind in der Regel sehr schnell, aber weit weniger stabil als die Alternativen. Runge Kutta ist langsamer als Euler, aber viel präziser und stabiler.
Ich bin nicht sehr gut informiert über die Verlet-Integration, daher habe ich keine Ahnung, wie sie sich gegen Euler und Runge Kutta schlägt.
Wenn Ihre Simulationen genauer oder sogar numerisch beweisbar sein müssen, ist Runge Kutta die bessere von beiden.
Wenn Sie eine schnelle und kostengünstige Physik für ein einfaches Spiel benötigen, ist Euler die bessere Wahl.
quelle
In erster Linie denke ich, dass Sie Euler verwenden sollten, bis Sie feststellen, dass ein fortgeschritteneres Integrationsschema erforderlich ist. Es ist schnell und einfach zu implementieren.
If you experience stability issues such as systems of springs that never come to rest or if your simulation requires a high level of accuracy then start experimenting with the others.
Eine, die ich oben nicht gesehen habe, ist die Midpoint-Methode, die sehr einfach zu implementieren ist und nur einen zusätzlichen Integrationsschritt erfordert.
quelle