2D-Planetengravitation

15

Ich versuche ein einfaches Spiel zu machen, in dem ein Raumschiff gestartet wird und dessen Weg dann von der Schwerkraft der Planeten beeinflusst wird.

Ähnlich wie bei diesem Spiel: http://sciencenetlinks.com/interactives/gravity.html

Ich möchte wissen, wie sich die Planeten in diesem Spiel auf das Raumschiff auswirken, damit sich ein Raumschiff um einen Planeten drehen und seine Richtung ändern kann.

Ich habe es geschafft, einige falsche Ergebnisse zu erzielen, bei denen sich das Raumschiff mit Vektoren in einer riesigen Ellipse um den Planeten dreht oder nur geringfügig von der Schwerkraft eines Planeten beeinflusst wird.

Danke im Voraus.

ps ich habe viel programmiererfahrung nur keine mit game dev zu tun.

gebacken
quelle

Antworten:

15

In Ihrem Fall gibt es ein Raumschiff, das sich durch die Schwerkraft aller Planeten bewegt. Jeder Planet wendet eine Kraft an, die gleich 'm1 * m2 / r ^ 2' ist, wobei m1 und m2 Massen von Raumschiff und Planet darstellen und r gleich der euklidischen Entfernung von Planet und Raumschiff ist. Sie müssen nur die Summe aller auf das Schiff einwirkenden Kräfte berechnen. Aus den Newtonschen Regeln wissen wir, dass f = m * a ist, wobei f die auf ein Objekt ausgeübte Gesamtkraft ist, m die Masse und a die Beschleunigung. Von diesem Punkt aus können Sie diese Seite lesen , um zu lernen, wie Sie die Beschleunigung verwenden, um Geschwindigkeit und Position über die Zeit zu berechnen.

Ali1S232
quelle
+1 Gute Ressource, die Sie verlinkt haben und die die Runge-Kutta-Integrationsmethode 4. Ordnung und alles erklärt.
David Gouveia
Mein aktuelles Problem ist der Weg, den das Raumschiff nimmt. Ich brauche es, um "spielerischer" zu sein. Ich habe ein einfaches Bild gemacht, um zu zeigen, was ich meine. i44.tinypic.com/2w2kdo4.jpg A ist das, was ich jetzt habe, B ist das, was ich will.
Gebacken
@baked: und die Masse des Planeten zu erhöhen würde nicht funktionieren?
Jesse Emond
5
Zusätzlich zum Gaffer on Games-Artikel müssen Sie unbedingt diesen Codeflow-Artikel lesen ! Runge-Kutta scheint hier nicht die beste Wahl zu sein.
Sam Hocevar
Wenn Sie A haben und B wollen, wie wäre es dann mit einer Verringerung der Anfangsgeschwindigkeit Ihres Raumschiffs?
Ben
4

Jeder Planet sollte ein Gravitationsfeld haben, das jedes Objekt in seiner Nähe in Richtung seines Zentrums zieht. Mit anderen Worten, Sie sollten bei jedem Schritt der Simulation eine Kraft von der Position des Raumschiffs auf das Zentrum des Planeten ausüben.

Diese Kraft hängt von der Masse beider Objekte ab, aber in diesem Fall können Sie, da die Masse des Raumschiffs im Vergleich zu der des Planeten wahrscheinlich unbedeutend ist, einfach verschiedene Konstanten ausprobieren, je nach Größe des Planeten, bis Sie das richtige Gefühl haben.

Am wichtigsten ist, dass diese Kraft umso schwächer wird, je größer der Abstand zwischen beiden Objekten ist. Sie tun dies, indem Sie durch den quadratischen Abstand zwischen beiden dividieren. Nach einer gewissen Entfernung möchten Sie möglicherweise manuell abschalten und die Anwendung der Kraft beenden.

Übersetzen Sie diese Kraft einfach in eine Beschleunigung, und die grundlegenden physikalischen Gleichungen sollten den Rest erledigen.

Im Pseudocode

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship
David Gouveia
quelle
Das ist eigentlich ziemlich ähnlich wie ich es momentan gemacht habe. Vielleicht geht es nur darum, mit den Konstanten zu spielen?
Gebacken
2
Ich bin mir nicht sicher, aber ich würde sagen, dass es jetzt wahrscheinlich nur eine Optimierung ist. Und ich denke, es hängt auch von der Anfangskraft ab, die Sie auf das Raumschiff ausüben, um es in die Umlaufbahn zu bringen.
David Gouveia