std.astro.insertion — Einfang, Bahnwechsel, Korrekturschübe

import std.astro.insertion;

Was nach dem Anflug kommt: bremsen und einfangen, zirkularisieren, Perizentrum anheben, die Umlaufbahn wieder verlassen — und Korrekturschübe aus dem Vergleich zweier Zustände. Alle Schubwerte in m/s.

std.astro (Übersicht) · std.astro.orbit · std.astro.entry


1. Anflug und Einfang

Funktion Rückgabe Bedeutung
AApproachSpeed(mu, rp, vInf) f64 Tempo im Perizentrum der Anflughyperbel. Ruft AInjectionSpeed aus std.astro.orbit — dieselbe Formel, bewusst nicht zweimal geschrieben
ACaptureDv(mu, vInf, rp, ra) f64 Bremsschub im Perizentrum für eine Ellipse rpra. Positiv als Betrag — die Richtung ist immer entgegen der Flugrichtung
ACaptureDvCircular(mu, vInf, r) f64 Sonderfall ra = rp: direkt in die Kreisbahn. Der teuerste Einfang
ACaptureDvMinimal(mu, vInf, rp) f64 gerade so viel, dass die Bahnenergie knapp negativ wird
AApoapsisAfterCapture(mu, vInf, rp, dv) f64 [m] die Planungsrichtung: welches Apozentrum erreicht ein gegebener Schub? NaN, wenn er für einen Einfang nicht reicht
ACapturePossible(mu, vInf, rp, dvBudget) bool reicht das Budget überhaupt?
 
ACaptureDvMinimal ist eine untere Schranke, kein Plan. Die entstehende Bahn ist beliebig groß — Umlaufzeiten von Monaten, und die geringste Störung löst sie wieder. Der Wert taugt für die Auslegung („weniger geht keinesfalls„), nicht für ein Manöver.

2. Nach dem Einfang

Funktion Rückgabe Bedeutung
ACircularizeDv(mu, rp, ra) f64 Schub im Apozentrum, um die Ellipse zur Kreisbahn zu machen; positiv = beschleunigen
ARaisePeriapsisDv(mu, ra, rpAlt, rpNeu) f64 Perizentrum anheben, ebenfalls im Apozentrum

Das Anflugperizentrum liegt oft tief in der Atmosphäre oder dicht über der Oberfläche, weil der Einfang dort am billigsten ist. Angehoben wird danach — das ist der übliche zweite Schritt.

3. Die Umlaufbahn verlassen

Funktion Rückgabe Bedeutung
ADeorbitDvCircular(mu, r, rTarget) f64 Bremsschub aus der Kreisbahn auf ein Zielperizentrum
ADeorbitDv(mu, rp, ra, rTarget) f64 dasselbe aus einer Ellipse — gebremst wird im Apozentrum
APeriapsisAfterBraking(mu, r, dv) f64 [m] Planungsrichtung: welches Perizentrum erzeugt ein gegebener Schub? NaN, wenn die Bahn den Körper trifft
ADeorbitSufficient(mu, r, dv, rLimit) bool erreicht der Schub die Atmosphäre?

Aus 400 km Höhe auf ein Perizentrum von 50 km sind es rund 100 m/s — erstaunlich wenig gemessen daran, dass es die ganze Rückkehr auslöst. Der Grund: gebremst wird nicht die Bahn, sondern nur ihre Gegenseite.

4. Korrekturschübe aus Zuständen

Bis hier war jede Größe eine Zahl aus einer Formel. Ein wirklicher Korrekturschub entsteht anders: aus dem Vergleich zweier Zustände am selben Ort.

Funktion Rückgabe Bedeutung
ACorrectionVec(ist, soll) AVec3 Schubvektor, der ist in soll überführt
ACorrectionDv(ist, soll) f64 dessen Betrag
ACorrectionPrograde(ist, soll) f64 Anteil in Flugrichtung
ACorrectionRadial(ist, soll) f64 Anteil nach außen
ACorrectionNormal(ist, soll) f64 Anteil senkrecht auf der Bahnebene — der teuerste je Wirkung
ACircularizeFromStateDv(mu, ist) f64 auf die Kreisbahn am aktuellen Ort, ohne Bahnelemente — die Form, die eine Bordrechnung benutzt

So wird ein Schub in der Praxis ausgeschrieben: „12 m/s prograde“ ist eine Anweisung, „(3.1, −8.4, 7.9) m/s im Inertialsystem„ ist es nicht.

 
Beide Zustände müssen am selben Ort und im selben Rahmen stehen — das prüft die Unit nicht, weil sie den Rahmen nicht kennt. Dafür gibt es AFrameMatches in std.astro.state; die Prüfung bleibt beim Aufrufer.

5. Die Parameter im Einzelnen

Name Bedeutung Einheit Zu beachten
mu Gravitationsparameter des Zielkörpers — beim Marseinfang also AMuMars(), nicht die Sonne m³/s²
vInf Überschussgeschwindigkeit beim Anflug, aus der interplanetaren Bahn m/s typisch 2.5…3.5 km/s für Mars, 5…6 km/s für Venus
rp Perizentrum: der Radius der dichtesten Annäherung, vom Mittelpunkt aus m ARadiusMars() + hoehe. Muss über der Atmosphäre liegen, sonst ist es kein Einfang, sondern ein Eintritt
ra Apozentrum der Zielellipse m muss ≥ rp sein, sonst NaN
r Radius der Kreisbahn (bei den …Circular-Formen) m
rTarget Zielperizentrum beim Deorbit — die Höhe, in der die Atmosphäre übernimmt m muss kleiner als der Ausgangsradius sein
rLimit Radius der Eintrittsgrenze für ADeorbitSufficient m für die Erde ARadiusEarth() + 122000
dv vorhandener oder geplanter Schub m/s immer positiv als Betrag; die Richtung steckt in der Funktion
dvBudget verfügbarer Schub bei ACapturePossible m/s
ist, soll zwei Zustände am selben Ort und im selben Rahmen die Unit prüft das nicht — siehe Kasten oben
 
Warum die Schubwerte Beträge sind. Beim Einfang und beim Deorbit geht der Schub immer entgegen der Flugrichtung; ein Vorzeichen würde nichts hinzufügen und beim Aufsummieren nur schaden. Anders bei ACircularizeDv und ARaisePeriapsisDv: dort wird beschleunigt, und der positive Wert meint genau das. Die Zerlegung eines Korrekturschubs (ACorrectionPrograde und die beiden anderen) ist dagegen vorzeichenbehaftet — negativ heißt: in die Gegenrichtung.

6. Beispiel: Marsankunft und Erdrückkehr

import std.astro.state;
import std.astro.orbit;
import std.astro.insertion;
import std.io;

fn zeig(n: pchar, v: f64, d: int64): void { Print(n); PrintLn(FloatToStr(v, d)); }
fn BI(b: bool): int64 { if (b) { return 1; } return 0; }

fn main(): int64 {
    // Mars, Anflug mit v_inf = 2.65 km/s, Perizentrum 250 km Hoehe
    var muM: f64 := AMuMars();
    var rp:  f64 := ARadiusMars() + 250000.0;

    zeig("Mars Anflugtempo   : ", AApproachSpeed(muM, rp, 2650.0), 1);
    zeig("Einfang minimal    : ", ACaptureDvMinimal(muM, 2650.0, rp), 1);
    zeig("Einfang in Kreis   : ", ACaptureDvCircular(muM, 2650.0, rp), 1);
    zeig("Einfang ra=30000km : ", ACaptureDv(muM, 2650.0, rp, 30000000.0), 1);
    zeig("Apoapsis bei 800dv : ", AApoapsisAfterCapture(muM, 2650.0, rp, 800.0) / 1000.0, 1);
    Print("Einfang moeglich?  : ");
    PrintLn(IntToStr(BI(ACapturePossible(muM, 2650.0, rp, 800.0))));

    // Erde: Deorbit aus 400 km
    var muE:  f64 := AMuEarth();
    var r400: f64 := ARadiusEarth() + 400000.0;
    zeig("Deorbit dv m/s     : ", ADeorbitDvCircular(muE, r400, ARadiusEarth() + 50000.0), 1);
    zeig("rp nach 100 m/s km : ", (APeriapsisAfterBraking(muE, r400, 100.0) - ARadiusEarth()) / 1000.0, 1);
    return 0;
}

Mars Anflugtempo   : 5524.0
Einfang minimal    : 677.1
Einfang in Kreis   : 2096.8
Einfang ra=30000km : 947.3
Apoapsis bei 800dv : 69197.5
Einfang moeglich?  : 1
Deorbit dv m/s     : 102.3
rp nach 100 m/s km : 57.6

Die Zahlen zeigen die Spreizung, um die es beim Einfang geht: 677 m/s für die gerade noch gebundene Bahn, 947 m/s für eine brauchbare Ellipse, 2097 m/s für die Kreisbahn. Mit 800 m/s Budget entsteht ein Apozentrum von rund 69 000 km — gefangen, aber weit draußen.

7. Beispiel: der Einfang in drei Schritten

Der billige Weg in eine niedrige Marsbahn ist nicht ein Schub, sondern drei — jeder dort angesetzt, wo er am wenigsten kostet:

import std.astro.state;
import std.astro.orbit;
import std.astro.insertion;
import std.io;

fn zeig(n: pchar, v: f64, d: int64): void { Print(n); PrintLn(FloatToStr(v, d)); }

fn main(): int64 {
    var mu: f64 := AMuMars();
    var rp: f64 := ARadiusMars() +   250000.0;    // tiefer Anflug: billiger Einfang
    var ra: f64 := ARadiusMars() + 30000000.0;    // weit draussen: billiges Umformen

    var dv1: f64 := ACaptureDv(mu, 2650.0, rp, ra);
    zeig("1) Einfang          : ", dv1, 1);

    var dv2: f64 := ARaisePeriapsisDv(mu, ra, rp, ARadiusMars() + 400000.0);
    zeig("2) Perizentrum heben: ", dv2, 1);

    var dv3: f64 := ACircularizeDv(mu, ARadiusMars() + 400000.0, ra);
    zeig("3) Zirkularisieren  : ", dv3, 1);

    zeig("Summe               : ", dv1 + dv2 + dv3, 1);
    zeig("direkt in Kreisbahn : ", ACaptureDvCircular(mu, 2650.0, ra), 1);

    // Korrekturschub: 5 m/s zu langsam und 3 m/s aus der Ebene
    var muE: f64 := AMuEarth();
    var r:   f64 := 6678000.0;
    var vc:  f64 := ACircularSpeed(muE, r);
    var ist:  AState := AMakeState(r, 0.0, 0.0,  0.0, vc - 5.0, 3.0);
    var soll: AState := AMakeState(r, 0.0, 0.0,  0.0, vc,       0.0);

    zeig("Korrektur gesamt    : ", ACorrectionDv(ist, soll), 3);
    zeig("  davon prograde    : ", ACorrectionPrograde(ist, soll), 3);
    zeig("  davon radial      : ", ACorrectionRadial(ist, soll), 3);
    zeig("  davon normal      : ", ACorrectionNormal(ist, soll), 3);
    return 0;
}

1) Einfang          : 921.9
2) Perizentrum heben: 9.2
3) Zirkularisieren  : 620.8
Summe               : 1551.8
direkt in Kreisbahn : 1963.9
Korrektur gesamt    : 5.831
  davon prograde    : 4.999
  davon radial      : 0.000
  davon normal      : -3.002

Der Umweg über die große Ellipse spart 412 m/s gegenüber dem direkten Einfang in dieselbe Kreisbahn — rund ein Fünftel. Das Anheben des Perizentrums um 150 km kostet dabei ganze 9.2 m/s, weil es im 30 000 km entfernten Apozentrum geschieht; dort ist die Bahn langsam und lässt sich billig umformen.

Die Zerlegung des Korrekturschubs zeigt die zweite Regel: von 5.83 m/s Gesamtschub stecken 5.0 in der Flugrichtung und 3.0 senkrecht zur Bahnebene. Das Vorzeichen der Normalkomponente sagt, in welche Richtung — und genau dieser Anteil ist der teuerste je Wirkung.


Letzte Aktualisierung: 2026-08-31 — Parametertabelle samt Vorzeichenregel und ein zweites Beispiel (Einfang in drei Schritten, Zerlegung eines Korrekturschubs) ergänzt; beide Beispiele mit lyxc 1.1.15B gebaut und ausgeführt.

Zuvor 2026-08-31 — Seite neu angelegt aus std/astro/insertion.lyx (PR #1890).