2D-Physik: Speichern der vorherigen Position im Vergleich zur Speichergeschwindigkeit

9

Ich habe eine Reihe von 2D-Spiel-Tutorials und Büchern gesehen, in denen die vorherige Position eines Objekts anstelle des Geschwindigkeitsvektors gespeichert wurde. Die Geschwindigkeit wird dann für jedes Bild als Differenz zwischen den Positionen berechnet.

Was sind die Vorteile dieser Methode?

Terzalo
quelle
2
Könnten Sie für den Kontext auf die betreffenden Tutorials verlinken?
Anko
Ich teile die gleiche Neugier von Anko
dnk drone.vs.drones
In diesem Tutorial wird erwähnt, dass dies als Verlet-Integration bezeichnet wird. Ich habe diesen Artikel gefunden , in dem die Vorteile von Verlet erklärt werden. Grundsätzlich ist es einfacher, mit Kollisionen und komplexen Einschränkungen umzugehen.
Terzalo
@Terzalo Sehen Sie die aktualisierte Version meiner Antwort, um zu sehen, ob es hilft, die allgemeine Logik hinter dem konkreten Fall zu verstehen
MAnd

Antworten:

1

Ohne genau zu wissen, welche Tutorials oder Bücher Sie gelesen haben, kann ich Ihnen Folgendes sagen.

Genauer gesagt in Bezug auf die physikalische Definition: Die Vektorrichtung wird als Differenz zwischen der aktuellen Position und der letzten Position berechnet. Die Vektorgeschwindigkeit ist gleich der geteilt durch die Zeit, die beim Übergang von einer Position zur anderen verstrichen ist. Siehe: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

Wenn jedoch die verstrichene Zeit als der generische "1 Rahmen" betrachtet wird, dh vom letzten Rahmen bis zum Strom, dann werden die Vektorgeschwindigkeit und die Vektorrichtung gleich. Im Pseudocode:

direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time

Im Allgemeinen besteht der Hauptgrund für das Speichern der Position im letzten Frame und das Abrufen der Position im aktuellen Frame darin, dass dies entweder der einzige oder der billigste Weg ist, die aktualisierte Richtung (und damit die aktualisierte Geschwindigkeit) zu kennen. dh die Bewegungsrichtung im aktuellen Frame.

Angenommen, Sie speichern die Richtung (oder sogar die Geschwindigkeit) in einem bestimmten Frame. Im nächsten Frame können Sie nur feststellen, ob sich die Richtung (oder sogar die Geschwindigkeit) geändert hat, wenn Sie sie erneut berechnet haben. Der Grund dafür ist, dass die vorherige Richtung oder die vorherige Geschwindigkeit Sie nicht über die aktuelle Richtung oder die aktuelle Geschwindigkeit informiert, falls sich die Bewegung von einem Bild zum nächsten ändert.

Wenn Sie nun die Tutorials berücksichtigen, die Sie im Kommentar zu Ihrer eigenen Frage erwähnt haben, wird dies noch deutlicher. In einem der Tutorials sagen die Autoren:

Lassen Sie uns nun unserem Partikel beibringen, wie es sich mit der Verlet-Integration bewegt. Das ist nur eine ausgefallene Art zu sagen, dass wir herausfinden werden, wie schnell sich unser Partikel bewegt, indem wir seine Position in diesem Frame mit seiner Position im letzten Frame vergleichen. Warum? Weil dies uns implizite Geschwindigkeit gibt - jede Änderung der aktuellen Position des Partikels aktualisiert automatisch seine Geschwindigkeit

Wie Sie sehen können, ermöglicht das Speichern der Position des letzten Frames, wie oben erwähnt, die aktualisierte Berechnung der Geschwindigkeit im aktuellen Frame, wenn das Objekt (im Tutorial ist es ein Partikel) die Position ändert. Wenn Sie nur die Richtung oder Geschwindigkeit im letzten Bild gespeichert haben , können Sie diese nicht so einfach aktualisieren, falls sich die Position vom letzten zum aktuellen Bild ändert. Wie in dem anderen Tutorial, auf das Sie verlinkt haben, erwähnt, ermöglicht das Speichern der vorherigen Position daher die automatische Aktualisierung der Geschwindigkeit, wenn sich die Positionen ändern.

MAnd
quelle