Ich versuche gerade, eine einfache 2D-Physik-Engine zu erstellen, und ich habe einige Probleme, herauszufinden, wie ich den Impuls in die Bewegung eines Raumschiffs integrieren kann.
Wenn ich mich mit einer bestimmten Geschwindigkeit in eine bestimmte Richtung bewege, kann ich die Position meines Schiffes derzeit problemlos aktualisieren (Position + = Richtung * Geschwindigkeit). Wenn sich das Schiff jedoch überhaupt dreht und ich die Richtung (basierend auf dem neuen Winkel, in den das Schiff zeigt) neu berechne und in diese Richtung beschleunige, wie kann ich dann den Impuls berücksichtigen, um die "Linie" zu ändern, auf der das Schiff fährt? Derzeit ändert das Schiff sofort die Richtung und fährt mit seiner aktuellen Geschwindigkeit in diese neue Richtung fort, wenn ich den Schubknopf drücke. Ich möchte, dass es sich um eine langsamere Drehbewegung handelt, um den Eindruck zu erwecken, dass das Schiff selbst eine gewisse Masse hat.
Wenn es zu diesem Thema bereits einen schönen Beitrag gibt, entschuldige ich mich, aber bei meinen Suchanfragen ist nichts aufgetaucht. Lassen Sie mich wissen, wenn weitere Informationen benötigt werden, aber ich hoffe, dass mir jemand leicht sagen kann, wie ich die Geschwindigkeit von Masse * in mein Game-Loop-Update einbringen kann.
Antworten:
Es sieht so aus, als hätten Sie Position und Richtung als Vektoren und Geschwindigkeit als Skalar?
Wenn ja, ändern Sie einfach die Geschwindigkeit ebenfalls in einen Vektor und machen Sie dann so etwas:
Die Richtung ist ein Einheitslängenvektor, der den Kurs Ihres Schiffes angibt. Power ist die Menge an Schub, die Sie hinzufügen möchten (Null, wenn keine Beschleunigung erforderlich ist). ElapsedTime ist die Zeit zwischen Ihren Spiel-Update-Aufrufen, um die Bewegung auch dann reibungslos zu halten, wenn sich Ihre Framerate ändert
Wenn Sie mehr darüber erfahren möchten, können Sie die Euler-Integration nachschlagen
quelle
Anstatt die Geschwindigkeit direkt zu manipulieren , fügen Sie eine weitere Variable hinzu: Beschleunigung , die die Geschwindigkeit allmählich gleichmäßig ändert :
Aus der klassischen Physik ( Newtons Bewegungsgesetze ):
wo:
(Anmerkung m ist der einzige Skalarwert; F, a, v und p sind alle 2D- oder 3D-Vektoren)
Es gibt auch zwei Richtungen:
Ich habe eine verwandte Frage zu StackOverflow: 2D-Raumschiff-Bewegungsmathematik beantwortet . Diese Antwort enthält einen Beispielcode.
quelle