====== 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).