Frage:
Wie kann ich 2 Umlaufbahnen interpolieren?
Gabriel_ES
2017-12-13 02:49:00 UTC
view on stackexchange narkive permalink

Meine Frage ist dieser sehr ähnlich, obwohl die Antwort nicht das ist, wonach ich gesucht habe. Grundsätzlich arbeite ich in einem Weltraumspiel (KSP) und mache es im Mehrspielermodus. Die Clients senden ein Paket mit ihren Orbitalparametern in einem Intervall (standardmäßig 30 Millisekunden), aber zwischen diesen Paketen möchte ich eine Umlaufbahn zwischen diesen beiden Paketen interpolieren und zeichnen.

Für normale Vektoren oder Geschwindigkeit verwende ich linear Interpolation:

  privater statischer float Lerp (float v0, float v1, float t) {return (1 - t) * v0 + t * v1;}  

Aber es funktioniert nicht gut, wenn ich mit Umlaufbahnen arbeite.

  var neigung = Lerp (Neigung, Target.inclination, lerpPercentage), var exzentrizität = Lerp (Exzentrizität, Target.eccentricity, lerpPercentage ), var semiMajorAxis = Lerp (semiMajorAxis, Target.semiMajorAxis, lerpPercentage), var LAN = Lerp (LAN, Target.LAN, lerpPercentage), var argumentOfPeriapsis = Lerp (argumentOfPeriapsis, Target.argumentOfPeriapis , Target.meanAnomalyAtEpoch, lerpPercentage), var epoch = Lerp (Epoche, Target.epoch, lerpPercentage),  

Mit welcher Funktion kann ich interpolieren sie gegessen?

Warum funktioniert es nicht gut. Ich hätte gedacht, dass lineare Interpolation für 30 ms in Ordnung wäre. Die Erde bewegt sich in 30 ms nur um etwa 10 ^ {- 7} Grad um die Sonne.
Nun, es kommt wirklich darauf an, manchmal kann man die Zeit beschleunigen und manchmal gehen Pakete verloren, so dass es zu einer Verzögerung von 1 oder 2 Sekunden kommen kann. Ist es also richtig, eine lineare Interpolation für Umlaufbahnen zu verwenden? Ich sehe sie zittern, aber vielleicht liegt es am Spiel und nicht an der Mathematik ...
Ich würde eine kubische Spline-Interpolation verwenden. Viel besser als linear.
Wenn Sie mehr Genauigkeit benötigen, können Sie eine Näherung höherer Ordnung verwenden.
Nur neugierig: Ist das Objekt, um das sie kreisen, fixiert? Zeichnen Sie diese Umlaufbahn nach Erhalt des 2. Pakets? Interpolieren Sie die Position oder die Orbitalelemente selbst?
Ich kenne die Positionen der Planeten bis zu jeder Millisekunde (ich lasse alle Spieler die gleiche Zeit haben, so dass alle Planetenpositionen für alle gleich sind) und interpoliere das Paket von Position 1 in der Vergangenheit. Sobald ich 2 Pakete habe, habe ich interpoliere die Position zwischen der 1. und der zweiten, sobald diese Interpolation beendet ist, interpoliere ich zwischen der zweiten und der dritten usw.
Einer antworten:
James K
2018-02-03 23:37:07 UTC
view on stackexchange narkive permalink

Es stehen mehrere Optionen zur Verfügung:

Interpolieren Sie überhaupt nicht. Nehmen Sie einfach an, der Planet bleibt bis zum nächsten Update fest. Der Planet Erde bewegt sich in 30 Millisekunden um 10 ^ {- 7} $ Grad. In der Weite des Raumes ist das ein Rundungsfehler.

Bei zwei Objekten, ihrer Position, Geschwindigkeit und Beschleunigung sowie den Werten ihrer Kepler-Elemente zu den Zeitpunkten t0 und t1, möchten Sie ihre Position, Geschwindigkeit und Beschleunigung jederzeit dazwischen schätzen.

Sie können ihre Position einfach linear interpolieren. Dies hat den Vorteil, sehr schnell zu sein, setzt jedoch eine konstante Geschwindigkeit voraus. Über kurze Zeiträume ist dies eine vernünftige Annahme. Für die meisten umlaufenden Körper sollte diese Näherung für Zeitunterschiede von vielen Minuten genau genug sein, da die Geschwindigkeitsänderungen relativ gering sind.

Sie können eine konstante Beschleunigung annehmen und mithilfe der SUVAT-Gleichung interpolieren. Dies ist sehr gut, wenn sich die Objekte nicht zu weit bewegen. Zum Beispiel kann es den Flug einer Kugel im Gravitationsfeld der Erde sehr gut modellieren und eine parabolische Form ergeben. Dies sollte eine ziemlich gute Annäherung an die Position über Stunden oder sogar Tage geben.

Sie können die Orbitalelemente linear interpolieren und die Kepler-Gleichung lösen, um die Position des Körpers zu einem bestimmten Zeitpunkt zu erhalten. Bei den meisten Körpern ändern sich die Orbitalelemente nur langsam mit der Zeit (mit Ausnahme der Anomalie). Das heißt, die Form der Umlaufbahn bleibt nahezu gleich, nur die Position auf der Umlaufbahn ändert sich. Die Annäherung der Umlaufbahn eines Planeten durch Interpolation seiner Elemente sollte eine gute Annäherung für mehrere hundert Jahre Umlaufzeit ergeben. Das Lösen der Gleichung ist jedoch langsam.

Schließlich können Sie das n-Körper-Problem für das Sonnensystem numerisch integrieren. Abhängig von dem von Ihnen gewählten Zeitschritt kann dies auf unbestimmte Zeit genau sein.

Diese können also wie folgt zusammengefasst werden:

  1. Konstante Position
  2. Konstante Geschwindigkeit
  3. Konstante Beschleunigung
  4. Variable Beschleunigung nach einem inversen Quadratgesetz.
  5. N-Körper-Gravitationsfeld mit variabler Beschleunigung.
  6. ol>

    Für eine Spiel-Engine ist die Geschwindigkeit gut. Wenn die Zeitlücken in der Größenordnung von Millisekunden (in Echtzeit) liegen, sollte eine einfache Nichtinterpolation nicht nachweisbar sein.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...