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
| 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 rp…ra. 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? |
ACaptureDvMinimalist 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.
| 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.
| 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.
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 esAFrameMatchesin std.astro.state; die Prüfung bleibt beim Aufrufer.
| 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 beiACircularizeDvundARaisePeriapsisDv: dort wird beschleunigt, und der positive Wert meint genau das. Die Zerlegung eines Korrekturschubs (ACorrectionProgradeund die beiden anderen) ist dagegen vorzeichenbehaftet — negativ heißt: in die Gegenrichtung.
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.
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).