====== std.astro.launch — Raketengleichung, Stufung, Startazimut ======
''import std.astro.launch;''
Vom Triebwerk bis zum Startplatz: Ziolkowski, Stufung, Schub-Gewicht-Verhältnis, Verluste beim Aufstieg und der Zusammenhang zwischen Startbreite, Azimut und erreichbarer Inklination.
→ [[lyx_-_programmiersprache:units:astro|std.astro (Übersicht)]] · [[lyx_-_programmiersprache:units:astro:orbit|std.astro.orbit]] · [[lyx_-_programmiersprache:units:astro:startplaetze|Startplätze (Referenzwerte)]] · [[lyx_-_programmiersprache:units:astro:traegerraketen|Trägerraketen (Referenzsysteme)]] · [[lyx_-_programmiersprache:units:astro:orbitmatrix|Orbit-Matrix]]
----
===== 1. Raketengleichung =====
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''AStandardGravity()'' | ''f64'' | 9.80665 m/s² — die **Normfallbeschleunigung**, nicht die örtliche Schwere. Der spezifische Impuls ist über sie festgelegt, weltweit gleich |
| ''AExhaustSpeed(isp)'' | ''f64'' [m/s] | ''v_e = Isp·g₀'' |
| ''ADvTsiolkovsky(isp, mWet, mDry)'' | ''f64'' [m/s] | ''Isp·g₀·ln(m_voll/m_leer)''; NaN, wenn ''mDry > mWet'' |
| ''AMassRatio(isp, dv)'' | ''f64'' | Umkehrung: ''e%%^%%(dv/v_e)'' |
| ''APropellantMass(isp, dv, mDry)'' | ''f64'' [kg] | Treibstoff für ein gefordertes dv |
| ''ABurnTime(mProp, massFlow)'' | ''f64'' [s] | bei konstantem Massenstrom |
| ''AMassFlow(thrust, isp)'' | ''f64'' [kg/s] | ''F/(Isp·g₀)'' |
Die Formel sagt zwei Dinge, die beim Auslegen immer wieder gebraucht werden: dv wächst nur **logarithmisch** mit dem Massenverhältnis (doppelt so viel Treibstoff bringt nicht doppelt so viel), aber **linear** mit Isp — ein besseres Triebwerk lohnt mehr als ein größerer Tank.
===== 2. Stufung =====
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''ADvStage(isp, mStructure, mProp, mPayload)'' | ''f64'' | dv einer Stufe, die eine **Nutzlast mitschleppt** |
| ''AStructuralRatio(mStructure, mProp)'' | ''f64'' | ''m_struktur/(m_struktur+m_treib)''; heute 0.05…0.12 |
| ''ADvStageLimit(isp, structuralRatio)'' | ''f64'' | ''Isp·g₀·ln(1/σ)'' — dv **ohne jede Nutzlast** |
| ''ADvTwoStages(isp1, mStruct1, mProp1, isp2, mStruct2, mProp2, mPayload)'' | ''f64'' | zwei Stufen; die erste trägt die zweite **mit** Nutzlast |
> **''ADvStageLimit'' ist die Zahl, an der jede Einstufigkeit scheitert.** Liegt der Bedarf darüber, hilft kein größerer Tank mehr — nur eine weitere Stufe oder ein besseres Triebwerk. Der Grund für Stufung überhaupt: die Nutzlast steht in **beiden** Massen und verkleinert das wirksame Verhältnis; eine leere Stufe weiterzutragen kostet dv, das keiner Nutzlast zugutekommt.
===== 3. Schub und Beschleunigung =====
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''AThrustToWeight(thrust, mass, gLocal)'' | ''f64'' | Schub-Gewicht-Verhältnis am Startort |
| ''ALiftsOff(thrust, mass, gLocal)'' | ''bool'' | über 1? Unter 1 hebt die Rakete **nicht** ab — das ist keine Ungenauigkeit, sondern die Bedingung |
| ''ALiftoffAccel(thrust, mass, gLocal)'' | ''f64'' [m/s²] | was tatsächlich ankommt: Schub minus Gewicht |
===== 4. Verluste und Drehgewinn =====
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''AGravityLoss(gLocal, gamma, duration)'' | ''f64'' [m/s] | ''g·sin γ·t'' |
| ''AEarthRotation()'' | ''f64'' | 7.292115e−5 rad/s (siderisch) |
| ''ARotationGain(omega, R, latitude, azimuth)'' | ''f64'' [m/s] | ''ω·R·cos(breite)·sin(azimut)'' |
| ''ADvAscent(mu, rOrbit, losses, rotationGain)'' | ''f64'' [m/s] | ''v_kreis + verluste − drehgewinn'' |
Der Gravitationsverlust ist der Grund für die Neigeprogramme: senkrecht steigen kostet die volle Schwere, waagerecht fliegen nichts. Der Drehgewinn ist nach Osten am größten — am Äquator 465 m/s, in Kourou (5.2° N) noch 463 m/s. Nach Westen kostet er **zusätzlich**; das Vorzeichen ist Teil der Aussage und wird nicht weggerechnet.
Für die Erde und einen niedrigen Orbit ergibt die Bilanz rund 9.3…9.5 km/s bei 7.8 km/s Bahngeschwindigkeit — die Differenz sind die Verluste, und genau deshalb stehen sie als eigenes Argument statt als eingebauter Zuschlag.
===== 5. Startazimut und Inklination =====
cos(i) = cos(breite) · sin(azimut)
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''AInclinationFromAzimuth(latitude, azimuth)'' | ''f64'' [rad] | erreichbare Inklination |
| ''ALaunchAzimuth(latitude, inclination)'' | ''f64'' [rad] | Azimut von Nord über Ost; **NaN, wenn die Inklination von dieser Breite aus nicht erreichbar ist** |
| ''AInclinationReachable(latitude, inclination)'' | ''bool'' | dieselbe Frage als Ja/Nein |
| ''AMinInclination(latitude)'' | ''f64'' [rad] | die Breite selbst (Azimut 90°, nach Osten) |
| ''AAzimuthPenalty(v, latitude, inclination)'' | ''f64'' [m/s] | was die spätere Ebenenänderung kostet, wenn der Startort die Zielinklination nicht hergibt; ''0'' wenn erreichbar |
Startplätze im Vergleich, gerechnet mit ''AMinInclination'', ''ARotationGain'', ''ALaunchAzimuth'' und ''AAzimuthPenalty''. Die vollständige Rampen-Referenz mit Koordinaten, Quellen und einem übernehmbaren Konstantenblock steht auf einer eigenen Seite: [[lyx_-_programmiersprache:units:astro:startplaetze|Startplätze]]. Zielbahn 51.6 Grad wie die ISS; die Strafe bezieht sich auf eine 28.5-Grad-Bahn bei 7725.8 m/s. Die Koordinaten stammen aus Wikipedia/Wikidata, die Zahlen aus dem Programm in Abschnitt 9.
^ Startplatz ^ Betreiber / Träger ^ Breite ^ min. Inklination ^ Drehgewinn nach Ost ^ Azimut für 51.6° ^ Strafe für 28.5° ^
| **Starbase** (Boca Chica, TX) | SpaceX, Starship | 25.997° N | 26.00° | **418.0 m/s** | 43.72° | 0 m/s |
| **SLC-40** (Cape Canaveral SFS) | SpaceX, Falcon 9 | 28.5619° N | 28.56° | 408.5 m/s | 45.01° | 8.3 m/s |
| **LC-39A** (Kennedy Space Center) | SpaceX, Falcon 9 / Falcon Heavy | 28.6083° N | 28.61° | 408.3 m/s | 45.03° | 14.6 m/s |
| **SLC-4E** (Vandenberg SFB) | SpaceX, Falcon 9 | 34.633° N | 34.63° | 382.7 m/s | 49.02° | **826.6 m/s** |
| Kourou (CSG) | Arianespace | 5.2° N | 5.2° | 463.2 m/s | 38.59° | 0 m/s |
| Baikonur | Roskosmos | 45.6° N | 45.6° | 324.9 m/s | 62.60° | **2363.9 m/s** |
Daran lässt sich die Arbeitsteilung der drei SpaceX-Rampen ablesen:
* **SLC-40 und LC-39A liegen 5 km auseinander** — 28.56° gegen 28.61° Breite. Der Unterschied ist für die Bahnmechanik bedeutungslos (0.2 m/s Drehgewinn, 0.02° Azimut); die beiden Rampen unterscheiden sich durch Infrastruktur, nicht durch Physik. LC-39A ist die Rampe für Falcon Heavy und bemannte Starts, SLC-40 die für den Standardbetrieb.
* **SLC-4E ist die Westküsten-Rampe** und mit 34.63° die nördlichste. Für die ISS-Bahn wäre sie um 827 m/s teurer als Florida — dafür ist sie für **rückläufige und sonnensynchrone** Bahnen der richtige Ort: über den Pazifik nach Süden liegt kein bewohntes Gebiet im Korridor.
* **Starbase liegt am weitesten südlich** (26.0°) und hat mit 418 m/s den größten Drehgewinn der vier — ein Vorteil von rund 10 m/s gegenüber Florida.
Zum Vergleich: Kourou liefert nochmals 45 m/s mehr als Starbase und erreicht als einziger Platz eine äquatornahe Bahn direkt. Baikonur zahlt für jede niedrige Inklination — 2364 m/s für eine 28.5-Grad-Bahn, mehr als der halbe Weg vom Erdorbit zum Mond.
> **Die härteste Einschränkung eines Startorts überhaupt: eine Inklination unterhalb der Startbreite ist direkt nicht erreichbar.** Von Baikonur (45.6° N) führt kein Azimut in eine 28-Grad-Bahn. Das kostet später eine Ebenenänderung — bei 7.8 km/s rund 134 m/s je Grad. Genau deshalb liegen Startplätze möglichst äquatornah.
> **Zwei Äste, zwei Funktionen** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1909|#1909]], nachgemessen mit lyxc 1.2.2B). Die Gleichung ''cos(i) = cos(breite)·sin(azimut)'' hat für jede erreichbare Inklination **zwei** Lösungen: den nördlichen Ast und den südlichen ''180° − β''. Beide führen in dieselbe Bahnneigung; die Wahl entscheiden Überflugkorridore und Bergungsschiffe.
>
> ''ALaunchAzimuth'' liefert den **nördlichen** Ast, ''ALaunchAzimuthSouth'' den **südlichen** — und beide als **Kompassrichtung** in [0°, 360°). Frühere Fassungen gaben den rohen ''asin''-Wert zurück: eine sonnensynchrone Bahn ab Vandenberg ergab ''−9.13'' Grad. Heute kommt dort ''351.6'' Grad heraus, und der Südast liefert die tatsächlich geflogene Richtung.
>
> Was bleibt: die Formel vernachlässigt die Erddrehung, die den tatsächlichen Azimut um einige Grad verschiebt (real fliegt Vandenberg SSO bei etwa 196 statt 189 Grad). Für die Auslegung ist das in Ordnung — als Steuergröße nicht.
===== 6. Die Parameter im Einzelnen =====
^ Name ^ Bedeutung ^ Einheit ^ Typische Werte ^
| ''isp'' | spezifischer Impuls des Triebwerks | **Sekunden** | 250…290 Feststoff, 300…340 Kerosin/LOX, 440…465 Wasserstoff/LOX (Vakuum) |
| ''mWet'' / ''mDry'' | Masse mit und ohne Treibstoff | kg | ''mDry > mWet'' ⇒ NaN |
| ''mStructure'' | Leermasse **einer Stufe** ohne Nutzlast: Tanks, Triebwerke, Struktur | kg | |
| ''mProp'' | Treibstoffmasse dieser Stufe | kg | |
| ''mPayload'' | Nutzlast, die die Stufe **mitschleppt** — bei der Unterstufe gehört die ganze Oberstufe dazu | kg | |
| ''structuralRatio'' | Strukturanteil ''σ = m_struktur/(m_struktur+m_treib)'' | dimensionslos | 0.05…0.12; muss zwischen 0 und 1 liegen |
| ''thrust'' | Schub | **Newton** (nicht kN) | Falcon-9-Erststufe ≈ 7.6e6 N |
| ''gLocal'' | **örtliche** Schwerebeschleunigung am Startort | m/s² | 9.81 Erde, 3.71 Mars, 1.62 Mond — nicht zu verwechseln mit ''AStandardGravity()'' |
| ''gamma'' | Bahnwinkel gegen die Horizontale beim Aufstieg | **Radiant** | 90 Grad senkrecht, gegen 0 beim Einschwenken |
| ''duration'' | Dauer, über die der Gravitationsverlust wirkt | s | |
| ''omega'' | Drehrate des Startkörpers | rad/s | ''AEarthRotation()'' = 7.292115e−5 |
| ''latitude'' | geografische Breite des Startplatzes | **Radiant** | Kourou 5.2°, Cape 28.5°, Baikonur 45.6° |
| ''azimuth'' | Startrichtung, von **Nord über Ost** gemessen | Radiant | 90 Grad = genau Ost |
| ''inclination'' | Zielinklination | Radiant | |
| ''losses'' | Summe aller Aufstiegsverluste | m/s | 1300…2000 für die Erde |
> **''AStandardGravity()'' ist nicht die örtliche Schwere.** Die 9.80665 m/s² sind eine **Festlegung**, über die der spezifische Impuls definiert ist — weltweit gleich, auch für einen Marsstart. Wo die tatsächliche Schwere gebraucht wird (Schub-Gewicht-Verhältnis, Gravitationsverlust), steht ''gLocal'' als eigenes Argument. Ein Marsstart rechnet also mit ''Isp·9.80665'' für die Ausströmgeschwindigkeit und mit ''3.71'' für das Abheben.
>
> **Isp steht in Sekunden**, nicht in m/s — die Ausströmgeschwindigkeit liefert ''AExhaustSpeed''. Wer versehentlich 3138 statt 320 einsetzt, bekommt ein zehnfach zu großes dv, das durchaus plausibel aussieht.
===== 7. Beispiel: Triebwerk und Startplatz =====
import std.astro.orbit;
import std.astro.launch;
import std.math;
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 {
var muE: f64 := AMuEarth();
var r400: f64 := ARadiusEarth() + 400000.0;
var rad: f64 := Pi() / 180.0;
zeig("v_e bei Isp 320 : ", AExhaustSpeed(320.0), 1);
zeig("dv 1000 auf 400 kg : ", ADvTsiolkovsky(320.0, 1000.0, 400.0), 1);
zeig("Massenverh. 3 km/s : ", AMassRatio(320.0, 3000.0), 4);
zeig("Drehgewinn Kourou : ", ARotationGain(AEarthRotation(), ARadiusEarth(), 5.2 * rad, Pi() / 2.0), 1);
zeig("min Inkl Baikonur : ", AMinInclination(45.6 * rad) / rad, 2);
Print("28 Grad erreichbar?: ");
PrintLn(IntToStr(BI(AInclinationReachable(45.6 * rad, 28.0 * rad))));
zeig("Azimut fuer 51.6 : ", ALaunchAzimuth(45.6 * rad, 51.6 * rad) / rad, 2);
zeig("dv Aufstieg LEO : ", ADvAscent(muE, r400, 1500.0, 400.0), 1);
return 0;
}
v_e bei Isp 320 : 3138.1
dv 1000 auf 400 kg : 2875.4
Massenverh. 3 km/s : 2.6012
Drehgewinn Kourou : 463.2
min Inkl Baikonur : 45.60
28 Grad erreichbar?: 0
Azimut fuer 51.6 : 62.60
dv Aufstieg LEO : 8768.6
===== 8. Beispiel: Auslegung einer zweistufigen Rakete =====
Die Frage, die am Anfang jeder Auslegung steht: reicht **eine** Stufe? Und wenn nicht — was leisten zwei?
import std.astro.orbit;
import std.astro.launch;
import std.math;
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 {
var rad: f64 := Pi() / 180.0;
// dv einer Stufe OHNE jede Nutzlast — die harte Schranke
zeig("Grenze Isp 320 s=0.08: ", ADvStageLimit(320.0, 0.08), 1);
zeig("Grenze Isp 450 s=0.08: ", ADvStageLimit(450.0, 0.08), 1);
zeig("Grenze Isp 450 s=0.05: ", ADvStageLimit(450.0, 0.05), 1);
// Zwei Stufen: Kerosin unten, Wasserstoff oben, 5 t Nutzlast
var dv: f64 := ADvTwoStages(311.0, 20000.0, 380000.0,
451.0, 4000.0, 80000.0, 5000.0);
zeig("dv zweistufig : ", dv, 1);
zeig("Strukturanteil St.1 : ", AStructuralRatio(20000.0, 380000.0), 4);
var m0: f64 := 20000.0 + 380000.0 + 4000.0 + 80000.0 + 5000.0;
zeig("Startmasse t : ", m0 / 1000.0, 1);
zeig("Schub-Gewicht 6 MN : ", AThrustToWeight(6000000.0, m0, 9.80665), 3);
Print("hebt ab? : "); PrintLn(IntToStr(BI(ALiftsOff(6000000.0, m0, 9.80665))));
zeig("Startbeschleunigung : ", ALiftoffAccel(6000000.0, m0, 9.80665), 2);
zeig("Brenndauer St.1 s : ", ABurnTime(380000.0, AMassFlow(6000000.0, 311.0)), 1);
zeig("Gravverlust 150 s 45 : ", AGravityLoss(9.80665, 45.0 * rad, 150.0), 1);
return 0;
}
Grenze Isp 320 s=0.08: 7926.1
Grenze Isp 450 s=0.08: 11146.0
Grenze Isp 450 s=0.05: 13220.1
dv zweistufig : 14712.4
Strukturanteil St.1 : 0.0500
Startmasse t : 489.0
Schub-Gewicht 6 MN : 1.251
hebt ab? : 1
Startbeschleunigung : 2.46
Brenndauer St.1 s : 193.2
Gravverlust 150 s 45 : 1040.2
Die ersten drei Zeilen beantworten die Einstufigkeits-Frage. Der Bedarf in den Erdorbit liegt bei rund **9.4 km/s** einschließlich Verluste:
* Mit Kerosin (Isp 320) und heutigem Leichtbau (σ = 0.08) sind **7926 m/s** möglich — und das **ohne jede Nutzlast**. Einstufig unmöglich.
* Mit Wasserstoff (Isp 450) werden es 11 146 m/s — rechnerisch machbar, aber die Nutzlast frisst den Abstand sofort auf.
* Erst σ = 0.05 bei Isp 450 gibt Luft (13 220 m/s). Genau hier lagen die Einstufen-Entwürfe, und genau daran sind sie gescheitert: 5 % Strukturanteil bei einem Wasserstofftank ist sehr wenig.
Die zweistufige Auslegung liefert 14.7 km/s — reichlich über dem Bedarf, weil die 5 t Nutzlast nur die Oberstufe belasten. Das Schub-Gewicht-Verhältnis von 1.25 ist typisch: darunter wird der Gravitationsverlust unbezahlbar, viel darüber kostet unnötig Struktur. Die verbleibende Startbeschleunigung von **2.46 m/s²** zeigt, wie knapp der Anfang ist — eine Viertel-g.
Der Gravitationsverlust ist die Zahl, die den Rest erklärt: 150 Sekunden bei 45 Grad Bahnwinkel kosten **1040 m/s**. Deshalb kippt jede Rakete so früh wie möglich — und so spät wie nötig, um die dichte Luft schnell hinter sich zu lassen.
===== 9. Beispiel: Startplätze durchrechnen =====
Die Tabelle in Abschnitt 5 stammt aus diesem Programm — die Breiten sind belegte Koordinaten, alles andere ist gerechnet:
import std.astro.orbit;
import std.astro.launch;
import std.math;
import std.io;
fn f(v: f64, d: int64): pchar { return FloatToStr(v, d); }
fn zeile(name: pchar, breiteGrad: f64, zielGrad: f64, vergleichGrad: f64): void {
var rad: f64 := Pi() / 180.0;
var b: f64 := breiteGrad * rad;
Print(name);
Print(" min i "); Print(f(AMinInclination(b) / rad, 2));
Print(" Drehgewinn Ost ");
Print(f(ARotationGain(AEarthRotation(), ARadiusEarth(), b, Pi() / 2.0), 1));
var az: f64 := ALaunchAzimuth(b, zielGrad * rad);
Print(" Azimut ");
if (AIsError(az)) { Print("nicht erreichbar"); } else { Print(f(az / rad, 2)); }
Print(" Strafe "); PrintLn(f(AAzimuthPenalty(7725.8, b, vergleichGrad * rad), 1));
}
fn main(): int64 {
PrintLn("Zielbahn 51.6 Grad, Vergleichsstrafe fuer 28.5 Grad:");
zeile("SLC-40 28.5619 N ", 28.5619, 51.6, 28.5);
zeile("LC-39A 28.6083 N ", 28.6083, 51.6, 28.5);
zeile("SLC-4E 34.633 N ", 34.633, 51.6, 28.5);
zeile("Starbase 25.997 N ", 25.997, 51.6, 28.5);
PrintLn("");
PrintLn("Sonnensynchron (97.5 Grad) - erreichbar?");
var rad: f64 := Pi() / 180.0;
var orte: [4]f64 := [28.5619, 28.6083, 34.633, 25.997];
var i: int64 := 0;
while (i < 4) {
var az: f64 := ALaunchAzimuth(orte[i] * rad, 97.5 * rad);
Print(" Breite "); Print(f(orte[i], 4)); Print(" -> Azimut ");
PrintLn(f(az / rad, 2));
i := i + 1;
}
return 0;
}
Zielbahn 51.6 Grad, Vergleichsstrafe fuer 28.5 Grad:
SLC-40 28.5619 N min i 28.56 Drehgewinn Ost 408.5 Azimut 45.01 Strafe 8.3
LC-39A 28.6083 N min i 28.61 Drehgewinn Ost 408.3 Azimut 45.03 Strafe 14.6
SLC-4E 34.633 N min i 34.63 Drehgewinn Ost 382.7 Azimut 49.02 Strafe 826.6
Starbase 25.997 N min i 26.00 Drehgewinn Ost 418.0 Azimut 43.72 Strafe 0.0
Sonnensynchron (97.5 Grad) - erreichbar?
Breite 28.5619 -> Azimut -8.55
Breite 28.6083 -> Azimut -8.55
Breite 34.6330 -> Azimut -9.13
Breite 25.9970 -> Azimut -8.35
Der Azimut von **45.01 Grad** für SLC-40 auf die ISS-Bahn deckt sich mit dem, was Falcon 9 dort tatsächlich fliegt (rund 44…45 Grad) — eine brauchbare Probe für die Formel.
Der zweite Block zeigt die Grenze aus dem Kasten oben: eine sonnensynchrone Bahn ist von **jedem** dieser Plätze erreichbar (kein NaN, denn 97.5° liegt über jeder der Breiten), aber der gemeldete Azimut ist der nördliche Ast. Als Startrichtung gilt der südliche: rund 189 Grad.
----
Letzte Aktualisierung: 2026-09-05 ([[https://github.com/SEOLizer/LyX-Compiler/issues/1909|#1909]], nachgemessen mit lyxc 1.2.2B) — Kasten gezogen: ''ALaunchAzimuth'' liefert den Nordast als Kompassrichtung, ''ALaunchAzimuthSouth'' den Südast; der negative Rohwert ist Geschichte.
Vorherige letzte Aktualisierung: 2026-08-31 — Startplatz-Tabelle um die drei SpaceX-Rampen (SLC-40, LC-39A, SLC-4E) und Starbase erweitert, Werte aus einem eigenen Programm gerechnet (Abschnitt 9); dabei gefunden und als Kasten vermerkt: ''ALaunchAzimuth'' liefert nur den nördlichen Ast (#1909). Zuvor: Parametertabelle und zweistufige Auslegung ergänzt. Alle Beispiele mit ''lyxc 1.1.15B'' gebaut und ausgeführt.
Zuvor 2026-08-31 — Seite neu angelegt aus ''std/astro/launch.lyx'' (PR #1890).