2012-03-28 12 views
2

Fast jedes Spiel neigt dazu, eine Spielschleife zu benutzen. Gafferongames hat einen großen Artikel darüber, wie eine gut gestaltetes Spiel Schleife zu machen: http://gafferongames.com/game-physics/fix-your-timestep/Numerische Integration, Runge-Kutta, RK4 im Spieldesign

In seinem Code verwendet er integrate(state, t, deltaTime);, wo ich glaube, state enthält Position, Geschwindigkeit und Beschleunigung des Objekts. Er verwendet RK4, um es von t zu t+deltaTime zu integrieren.

Meine Frage ist, warum eine numerische Integrationstechnik wie RK4 verwenden, wenn Sie Kinematik Gleichungen verwenden (here) den genauen Wert zu finden?

Diese Gleichungen funktionieren, wenn die Beschleunigung konstant ist. Es scheint selten, dass Sie eine wechselnde Beschleunigung innerhalb ein Zeitschritt haben. Es scheint, als wäre RK4 eine geringere Leistung, geringere Genauigkeit, komplexere Lösung.

Edit: Ich denke, Sie könnten einen "Ruck" Wert zu Objekten hinzufügen und immer noch exakte Ausdrücke für Beschleunigung, Geschwindigkeit und Verschiebung finden, wenn Sie wirklich wollten.

Edit 2: Nun, ich habe seinen Artikel "Integration Basics" nicht zu sorgfältig gelesen. Ich denke, er modelliert einen Dämpfer und eine Feder, die innerhalb eines Zeitschritts eine nicht konstante Beschleunigung verursachen.

Antwort

6

Sobald Sie Dinge hinzufügen, die viele Spieleentwickler wollen, wie (geschwindigkeitsabhängiger) Widerstand, positionsabhängige Kräfte usw. sind die Gleichungen nicht mehr exakt lösbar.

Also, wenn Sie Ihre Kräfte auf diejenigen beschränken, die die kinematische Gleichung handhaben kann, dann gehen Sie damit. Wenn Sie etwas flexibles wollen, dann ist numerische Integration der einzige Weg zu gehen.

Hinweis: Wenn Sie die Kräfte über ein Zeitintervall als konstant betrachten, wenn sie nicht wirklich konstant sind - dann verwenden Sie tatsächlich eine Form der numerischen Integration. Und es ist auch eine ungenaue Form der Integration. Warum also nicht eine bewährte numerische Methode? RK4 ist eine von vielen solchen Methoden.

2

Approximierende Beschleunigung (Ableitungen, wirklich) als Konstante innerhalb eines Zeitschritts ist, wie numerische Integrationsmethoden funktionieren. Wenn die Ableitungen nicht konstant sind, müssen Sie überlegen, welche Art von Fehlern Sie einführen, indem Sie sie als konstant behandeln.

Stellen Sie sich vor, einen Zeitbereich T bis N gleiche Schritte der Breite h=T/N brechen. Integriere nun die dynamischen Gleichungen schrittweise. Bei RK4 ist der lokale Fehler pro Schritt O(h^5), was einen globalen Fehler von O(h^4) ergibt.

Mit den kinematischen Gleichungen, wie Sie vorschlagen, können wir den Fehler durch Berücksichtigung der Taylor-Ausdehnung der Position beurteilen, wobei die Terme auf der zweiten Ordnung bleiben. Die Position wird einen Fehler von O(h^3) haben, der bei jedem Schritt eingeführt wird, der dem entspricht, wo Sie die Erweiterung abschneiden. Dies ergibt den lokalen Fehler O(h^3) und den globalen Fehler O(h^2).

Basierend auf dem asymptotischen Fehler geht der Fehler von RK4 schneller auf Null als viel als die kinematischen Gleichungen. Es ist genauer. RK4 erhält eine sehr gute Genauigkeit für die Anzahl der Funktionsauswertungen, die durchgeführt werden müssen.