====== Bahntypen — der Katalog der Umlaufbahnen ======
Die vierte Seite der Reihe. [[lyx_-_programmiersprache:units:astro:startplaetze|Startplätze]], [[lyx_-_programmiersprache:units:astro:traegerraketen|Trägerraketen]] und die [[lyx_-_programmiersprache:units:astro:orbitmatrix|Orbit-Matrix]] arbeiten mit vier Zielbahnen. Hier steht der vollständige Katalog: welche Bahntypen es gibt, welche Kennwerte [[lyx_-_programmiersprache:units:astro:orbit|std.astro.orbit]] dafür liefert — und wo die Grenze des Modells liegt.
**Alle Zahlen sind gerechnet**, das Programm in Abschnitt 4 erzeugt sie.
→ [[lyx_-_programmiersprache:units:astro:orbit|std.astro.orbit]] · [[lyx_-_programmiersprache:units:astro:launch|std.astro.launch]] · [[lyx_-_programmiersprache:units:astro:orbitmatrix|Orbit-Matrix]] · [[lyx_-_programmiersprache:units:astro|std.astro (Übersicht)]]
----
===== 1. Der Katalog =====
^ Bahn ^ Form ^ Neigung ^ Wofür ^ auslegbar? ^
| **LEO** | Kreis, 200–2000 km | beliebig ab Startbreite | Raumstationen, Konstellationen, Erdbeobachtung | ja |
| **ISS-Bahn** | Kreis, ~400 km | 51.6° | Internationale Raumstation | ja |
| **Tiangong-Bahn** | Kreis, ~387 km | 41.47° | chinesische Raumstation | ja |
| **Hubble-Bahn** | Kreis, ~510 km | 28.4687° | Weltraumteleskop, Wartungsanflüge | ja |
| **Polar** | Kreis, 300–1000 km | ~90° | vollständige Erdabdeckung, Aufklärung | ja |
| **SSO** (sonnensynchron) | Kreis, 600–800 km | 97–99° rückläufig | konstante Ortszeit am Boden, Erdbeobachtung | ja ¹ |
| **MEO** | Kreis, 20 000–24 000 km | 55–56° | Navigation (GPS, Galileo) | ja |
| **GTO** | Ellipse, ~200 × 35 786 km | Startbreite | Übergangsbahn zum GEO | ja |
| **GEO** | Kreis, 35 786 km | 0° | Kommunikation, Wetter | ja |
| **Molniya** | Ellipse, ~600 × 39 750 km | 63.4° | Nordabdeckung aus hoher Breite | ja ² |
| **Tundra** | Ellipse, ~27 350 × 44 220 km | 63.4° | wie Molniya, aber ein Umlauf pro Tag | ja ² |
| **HEO allgemein** | Ellipse, hohes Apogäum | beliebig | Wissenschaft, Frühwarnung | ja |
| **Frozen Orbit** | fast kreisförmig, Perigäum bei 90° | frei wählbar | langlebige Erdbeobachtung ohne Nachregelung | ja ³ |
| **Repeat Ground Track** | Kreis, Höhe aus Wiederholzyklus | beliebig | wiederkehrende Aufnahmen desselben Streifens | ja ⁴ |
| **Lagrange / Halo** | um L1…L5 | – | Weltraumteleskope, Sonnenbeobachtung | ja ⁵ |
¹ Neigung aus der Bahnhöhe über ''ASunSyncInclination'' — siehe Abschnitt 3.
\\ ² Neigung über ''ACriticalInclination''; dass der Apsidendrift dort verschwindet, lässt sich mit ''AApsidalDrift'' nachweisen.
\\ ³ Exzentrizität über ''AFrozenEccentricity'', Prüfung über ''AIsFrozen'' — siehe Abschnitt 4.
\\ ⁴ Bahnhöhe über ''ASmaFromRepeatCycle'' aus Umläufen und Tagen.
\\ ⁵ ''std.astro.cr3bp'' führt die fünf Punkte, die Jacobi-Konstante und seit [[https://github.com/SEOLizer/LyX-Compiler/issues/2001|#2001]] auch Halo-Bahnen — bis rund 675 000 km Auslenkung ([[https://github.com/SEOLizer/LyX-Compiler/issues/2016|#2016]]).
===== 2. Was heute herauskommt =====
**Kreisbahnen** — ''ACircularSpeed'' und ''APeriod'':
^ Bahn ^ große Halbachse ^ Bahngeschwindigkeit ^ Umlaufzeit ^
| LEO 400 km | 6778 km | 7669 m/s | 92.6 min |
| SSO 700 km | 7078 km | 7504 m/s | 98.8 min |
| MEO GPS (20 180 km) | 26 558 km | 3874 m/s | 717.9 min |
| MEO Galileo (23 222 km) | 29 600 km | 3670 m/s | 844.7 min |
| GEO | 42 164 km | 3075 m/s | 1436.1 min |
Die Umlaufzeiten sind zugleich die Probe: **717.9 min sind 11.965 h**, der halbe Sterntag — GPS-Satelliten umrunden die Erde zweimal pro Sterntag, und genau das kommt heraus. **1436.1 min** für den GEO sind der volle Sterntag.
**Ellipsenbahnen** — ''ASemiMajorAxis'', ''APeriod'', ''AVisViva'':
^ Bahn ^ große Halbachse ^ Umlaufzeit ^ Geschwindigkeit im Perigäum ^ im Apogäum ^
| GTO 200 × 35 786 km | 24 371 km | 10.52 h | 10 239 m/s | 1597 m/s |
| Molniya 600 × 39 750 km | 26 553 km | **11.96 h** | 9961 m/s | 1507 m/s |
| Tundra 27 353 × 44 219 km | 42 164 km | **23.93 h** | 3766 m/s | 2510 m/s |
Auch hier stimmt die Probe: Molniya trifft den halben Sterntag, Tundra den vollen. Und der Grund für beide Bahnen steht in der letzten Spalte — im Apogäum ist ein Molniya-Satellit mit 1507 m/s unterwegs, also fast siebenmal langsamer als im Perigäum. Er steht dort stundenlang fast still über dem Norden, und genau dafür wurde die Bahn entworfen.
**Übergänge ab LEO 400 km:**
^ Ziel ^ dv ^
| GEO (Hohmann) | 3854.0 m/s |
| GPS-MEO | 3414.9 m/s |
| Flucht (C3 = 0) | 3176.4 m/s |
| Ebenenwechsel 28.5° im LEO | 3775.3 m/s |
| Ebenenwechsel 28.5° im GEO | 1513.7 m/s |
| Ebenenwechsel 90° im LEO | 10 845 m/s |
> **Die drei letzten Zeilen sind die wichtigste Lehre der Bahnmechanik in Zahlen.** Eine Ebenenänderung von 28.5° kostet im LEO 3775 m/s — mehr als der komplette Weg zum GEO. Dieselbe Drehung im GEO kostet 1514 m/s, weil man dort viermal langsamer fliegt. Und ein Wechsel auf eine polare Bahn im LEO kostet 10 845 m/s, exakt so viel wie die Fluchtgeschwindigkeit von dort: bei 90° ist es billiger, die Erde zu verlassen, als die Bahnebene zu drehen.
===== 3. Die Abplattung der Erde =====
Drei Bahnfamilien lassen sich mit einem kugelrunden Zentralkörper nicht erklären — sie existieren erst durch die **Abplattung**, in der Bahnmechanik als Koeffizient ''J2'' geführt. Seit [[https://github.com/SEOLizer/LyX-Compiler/issues/1988|#1988]] hat ''std.astro.orbit'' die dafür nötigen Funktionen: ''AJ2Earth'', ''ANodalDrift'', ''AApsidalDrift'', ''ACriticalInclination'' und ''ASunSyncInclination''.
**Sonnensynchrone Bahnen.** Eine SSO funktioniert, weil J2 die Bahnebene pro Tag mitdreht — genau so schnell, wie die Erde um die Sonne wandert. Die Solldrift ist damit **0.9856 Grad/Tag** (360° je tropischem Jahr), und ''ASunSyncInclination'' dreht die Formel nach der Neigung um:
^ Bahnhöhe ^ nötige Neigung ^ erreichte Knotendrift ^
| 600 km | 97.788° | 0.9856 °/Tag |
| 700 km | **98.188°** | 0.9856 °/Tag |
| 800 km | 98.603° | 0.9856 °/Tag |
Die dritte Spalte ist die Gegenprobe: die berechnete Neigung wieder in ''ANodalDrift'' eingesetzt ergibt exakt die Solldrift zurück. Und der Wert erklärt die Neigung: die Drift muss **positiv** sein, also muss der Kosinus negativ sein — eine sonnensynchrone Bahn ist zwangsläufig rückläufig.
> **Die 97.5° auf der [[lyx_-_programmiersprache:units:astro:orbitmatrix|Orbit-Matrix]] sind ein Rundwert.** Für die dort gerechnete Höhe von 700 km wären 98.188° richtig. Die Matrix rechnet den Energiebedarf, und der ändert sich zwischen 97.5° und 98.2° kaum — für eine Missionsauslegung wäre der Unterschied dagegen erheblich.
**Molniya und Tundra.** Beide fliegen bei 63.4°, weil dort die Apsidenlinie stehenbleibt: das Apogäum wandert nicht aus der Nordhalbkugel heraus. ''ACriticalInclination'' liefert **63.4349°** — der Wert folgt aus 5·cos²i = 1, also der Bedingung, dass der Apsidendrift-Term verschwindet. ''AApsidalDrift'' beweist es:
^ Bahn ^ Neigung ^ Knotendrift ^ Apsidendrift ^
| Molniya (600 × 39 750 km) | **63.4349°** | −0.1481 °/Tag | **0.0000 °/Tag** |
| Molniya, dieselbe Bahn | 45.0° | −0.2341 °/Tag | 0.2483 °/Tag |
| Tundra (27 353 × 44 219 km) | **63.4349°** | −0.0065 °/Tag | **0.0000 °/Tag** |
| ISS-Bahn (400 km) | 51.6° | −5.0023 °/Tag | 3.7413 °/Tag |
| Hubble-Bahn (510 km) | 28.4687° | −6.6910 °/Tag | 10.8991 °/Tag |
Die zweite Zeile ist der Beleg: dieselbe Molniya-Bahn bei 45° statt 63.4° dreht ihr Perigäum um 0.25 Grad pro Tag — nach einem Jahr steht das Apogäum 90 Grad daneben, und die Bahn tut nicht mehr, wofür sie gebaut wurde. Bei der kritischen Neigung kommt exakt null heraus.
Die letzten beiden Zeilen zeigen, warum J2 im tiefen LEO überhaupt keine Randnotiz ist: die ISS-Bahnebene wandert **fünf Grad pro Tag** nach Westen. Wer ein Startfenster berechnet, rechnet in erster Linie gegen diese Drift.
Die übrigen Familien, die diese Seite anfangs als Lücken führte, sind inzwischen ebenfalls geschlossen — der nächste Abschnitt rechnet sie durch.
===== 4. Wiederholbahnen, Frozen Orbits, Bahnverfall, Bodenspur, Librationspunkte =====
Fünf Familien, die der Katalog dieser Seite als Lücken auswies, sind seit [[https://github.com/SEOLizer/LyX-Compiler/issues/1993|#1993]] bis [[https://github.com/SEOLizer/LyX-Compiler/issues/1997|#1997]] abgedeckt — zwei davon in neuen Units.
==== Wiederholbahnen ====
Eine Wiederholbahn überfliegt nach //k// Umläufen in //m// Tagen wieder denselben Punkt. Die Bedingung verbindet die **Nodalperiode** (Umlaufzeit von Knoten zu Knoten, nicht von Perigäum zu Perigäum) mit der Erddrehung und der Knotendrift aus J2 — deshalb steht sie in ''std.astro.orbit'' und nicht in einer Geometrie-Unit.
^ Zyklus ^ Bahnhöhe ^ Nodalperiode ^
| 233 Umläufe / 16 Tage, i = 98.6° | **700.3 km** | 98.90 min |
| 431 Umläufe / 29 Tage, i = 98.2° | 604.6 km | – |
Der erste Fall ist der Landsat-Zyklus. ''ARepeatCycleFromSma'' rechnet zurück und liefert **14.5625** Umläufe pro Tag — genau 233/16.
==== Frozen Orbits ====
Ein Frozen Orbit hält seine Perigäumshöhe fest, ohne nachzuregeln. Dafür braucht es **J3**, den dritten zonalen Koeffizienten: J2 dreht das Perigäum, J3 zieht es zurück, und bei genau einer Exzentrizität heben sich beide auf.
^ Größe ^ Wert ^
| ''AJ3Earth()'' | −2.532·10⁻⁶ |
| ''AFrozenArgPerigee()'' | **90°** — das Perigäum steht über dem Nordpol |
| ''AFrozenEccentricity'' für 800 km, i = 98.6° | **0.0010274** |
| daraus Perigäum / Apogäum | 792.6 km / 807.4 km |
Knapp 15 km Unterschied zwischen tiefstem und höchstem Punkt — und die bleiben, wo sie sind. ''AIsFrozen'' prüft eine gegebene Bahn gegen diese Bedingung und bestätigt die eigene Rechnung.
==== Bahnverfall ====
''ADecayPerRev'' und ''ADecayRate'' verbinden die Luftdichte mit dem ballistischen Koeffizienten aus [[lyx_-_programmiersprache:units:astro:entry|std.astro.entry]]:
^ Bahn ^ Abstieg je Umlauf ^ je Tag ^
| 400 km, β = 50 | −115.5 m | −1796 m |
| 300 km, β = 50 | – | **−17 831 m** |
Hundert Kilometer tiefer, zehnfacher Verfall — die Dichte steigt exponentiell, und das ist der Grund, warum die ISS regelmäßig angehoben wird.
==== Bodenspur ====
''std.astro.groundtrack'' schließt das Glied zwischen dem Ortsvektor im Inertialsystem und der drehenden Erde: die Drehung um den **Greenwich-Stundenwinkel**. Vorne liegt [[lyx_-_programmiersprache:units:astro:state|std.astro.state]], hinten [[lyx_-_programmiersprache:units:geodesy:frames|std.geodesy.frames]].
Probe am Julianischen Datum 2 460 000.5: GMST = **154.6019°**. Ein Satellit, der dort im ECI genau auf der x-Achse steht, hat den Unterpunkt 0° Breite und **−154.6019°** Länge — der Betrag des Stundenwinkels, mit umgedrehtem Vorzeichen. Genau das ist die Drehung, und mehr ist der Unterschied zwischen den beiden Rahmen nicht.
==== Librationspunkte ====
''std.astro.cr3bp'' steht **neben** dem übrigen Bestand, nicht darin: alle anderen Units rechnen im Zweikörperproblem, in dem Librationspunkte gar nicht existieren.
^ Punkt ^ Abstand ^
| Sonne–Erde L1 | 1 491 551 km von der Erde |
| Sonne–Erde L2 | 1 501 532 km von der Erde |
| Erde–Mond L1 | 58 019 km vom Mond |
| Hill-Radius der Erde | 1 496 557 km |
Die Massenverhältnisse dahinter: ''AMuEarthMoon()'' = 0.0121506, ''AMuSunEarth()'' = 3.003·10⁻⁶. L2 ist der Punkt, um den das James-Webb-Teleskop läuft — die 1.5 Millionen Kilometer sind die bekannte Zahl, und sie kommen hier aus der Rechnung.
**Halo-Bahnen** sind seit [[https://github.com/SEOLizer/LyX-Compiler/issues/2001|#2001]] ebenfalls enthalten — über eine Fortsetzung statt über Richardsons Reihe. Für Sonne–Erde-L2 kommen bei 0.4 ''gamma'' Auslenkung 600 613 km und eine Umlaufzeit von 177.9 Tagen heraus; die Einzelheiten stehen auf [[lyx_-_programmiersprache:units:astro:cr3bp|std.astro.cr3bp]].
**Was bleibt:** Halo-Bahnen oberhalb von rund 675 000 km ([[https://github.com/SEOLizer/LyX-Compiler/issues/2016|#2016]]), Strahlungsdruck, und ein Atmosphärenmodell, das die Dichte über der Höhe selbst liefert — ''ADecayRate'' bekommt sie heute als Parameter.
===== 5. Die Programme =====
**Teil A — die J2-Rechnungen aus Abschnitt 3:**
unit main;
import std.astro.orbit;
import std.math;
import std.io;
import std.string;
fn f(v: f64, d: int64): pchar { return FloatToStr(v, d); }
fn G(rad: f64): f64 { return rad * 180.0 / Pi(); }
fn ProTag(radProSek: f64): f64 { return G(radProSek) * 86400.0; }
fn sso(hoeheKm: f64): void {
var a: f64 := ARadiusEarth() + hoeheKm * 1000.0;
var i: f64 := ASunSyncInclination(AMuEarth(), AJ2Earth(), ARadiusEarth(), a, 0.0);
Print("SSO "); Print(f(hoeheKm, 0)); Print(" km: i = ");
Print(f(G(i), 3)); Print(" Grad, Knotendrift ");
Print(f(ProTag(ANodalDrift(AMuEarth(), AJ2Earth(), ARadiusEarth(), a, 0.0, i)), 4));
PrintLn(" Grad/Tag");
}
fn drift(name: pchar, a: f64, e: f64, incGrad: f64): void {
var i: f64 := incGrad * Pi() / 180.0;
Print(name);
Print(" | Knoten "); Print(f(ProTag(ANodalDrift(AMuEarth(), AJ2Earth(), ARadiusEarth(), a, e, i)), 4));
Print(" Grad/Tag | Apsiden "); Print(f(ProTag(AApsidalDrift(AMuEarth(), AJ2Earth(), ARadiusEarth(), a, e, i)), 4));
PrintLn(" Grad/Tag");
}
fn main(): int64 {
PrintLn(StrConcat("kritische Neigung: ", StrConcat(f(G(ACriticalInclination()), 4), " Grad")));
PrintLn(StrConcat("rueckläufige Loesung: ", StrConcat(f(G(ACriticalInclinationRetro()), 4), " Grad")));
PrintLn(StrConcat("sonnensynchrone Solldrift: ", StrConcat(f(ProTag(ASunSyncDrift()), 4), " Grad/Tag")));
PrintLn("");
sso(600.0);
sso(700.0);
sso(800.0);
PrintLn("");
PrintLn("Bahn | Knotendrift | Apsidendrift");
drift("LEO 400 km i=51.6", ARadiusEarth() + 400000.0, 0.0, 51.6);
drift("Hubble 510 i=28.5", ARadiusEarth() + 510200.0, 0.0, 28.4687);
drift("Molniya i=63.4", 26553000.0, 0.7402, 63.4349);
drift("Molniya i=45.0", 26553000.0, 0.7402, 45.0);
drift("Tundra i=63.4", 42164000.0, 0.2, 63.4349);
return 0;
}
Ausgabe:
kritische Neigung: 63.4349 Grad
rueckläufige Loesung: 116.5651 Grad
sonnensynchrone Solldrift: 0.9856 Grad/Tag
SSO 600 km: i = 97.788 Grad, Knotendrift 0.9856 Grad/Tag
SSO 700 km: i = 98.188 Grad, Knotendrift 0.9856 Grad/Tag
SSO 800 km: i = 98.603 Grad, Knotendrift 0.9856 Grad/Tag
Bahn | Knotendrift | Apsidendrift
LEO 400 km i=51.6 | Knoten -5.0023 Grad/Tag | Apsiden 3.7413 Grad/Tag
Hubble 510 i=28.5 | Knoten -6.6910 Grad/Tag | Apsiden 10.8991 Grad/Tag
Molniya i=63.4 | Knoten -0.1481 Grad/Tag | Apsiden 0.0000 Grad/Tag
Molniya i=45.0 | Knoten -0.2341 Grad/Tag | Apsiden 0.2483 Grad/Tag
Tundra i=63.4 | Knoten -0.0065 Grad/Tag | Apsiden 0.0000 Grad/Tag
**Teil B — die Bahnkennwerte aus Abschnitt 2:**
unit main;
import std.astro.orbit;
import std.math;
import std.io;
import std.string;
fn f(v: f64, d: int64): pchar { return FloatToStr(v, d); }
fn Grad(g: f64): f64 { return g * Pi() / 180.0; }
// Kreisbahn: Hoehe in km
fn kreis(name: pchar, hoeheKm: f64): void {
var r: f64 := ARadiusEarth() + hoeheKm * 1000.0;
Print(name);
Print(" | a "); Print(f(r / 1000.0, 0));
Print(" km | v "); Print(f(ACircularSpeed(AMuEarth(), r), 0));
Print(" m/s | T "); PrintLn(StrConcat(f(APeriod(AMuEarth(), r) / 60.0, 1), " min"));
}
// Ellipse: Perigaeums- und Apogaeumshoehe in km
fn ellipse(name: pchar, hpKm: f64, haKm: f64): void {
var rp: f64 := ARadiusEarth() + hpKm * 1000.0;
var ra: f64 := ARadiusEarth() + haKm * 1000.0;
var a: f64 := (rp + ra) / 2.0;
Print(name);
Print(" | a "); Print(f(a / 1000.0, 0));
Print(" km | T "); Print(f(APeriod(AMuEarth(), a) / 3600.0, 2));
Print(" h | vp "); Print(f(AVisViva(AMuEarth(), rp, a), 0));
Print(" | va "); PrintLn(f(AVisViva(AMuEarth(), ra, a), 0));
}
fn main(): int64 {
PrintLn("-- Kreisbahnen --");
kreis("LEO 400 km ", 400.0);
kreis("SSO 700 km ", 700.0);
kreis("MEO GPS 20180 km", 20180.0);
kreis("MEO Galileo ", 23222.0);
kreis("GEO ", 35786.0);
PrintLn("");
PrintLn("-- Ellipsenbahnen --");
ellipse("GTO 200 x 35786 ", 200.0, 35786.0);
ellipse("Molniya 600x39750", 600.0, 39750.0);
ellipse("Tundra 27353x44219", 27353.0, 44219.0);
PrintLn("");
PrintLn("-- Uebergaenge ab LEO 400 km --");
var rLeo: f64 := ARadiusEarth() + 400000.0;
PrintLn(StrConcat("-> GEO (Hohmann): ", f(AHohmannDv(AMuEarth(), rLeo, 42164000.0), 1)));
PrintLn(StrConcat("-> GPS-MEO: ", f(AHohmannDv(AMuEarth(), rLeo, ARadiusEarth()+20180000.0), 1)));
PrintLn(StrConcat("-> Fluchtgeschw.: ", f(AEscapeSpeed(AMuEarth(), rLeo), 1)));
PrintLn(StrConcat("-> Flucht-dv ab LEO: ", f(AEscapeDv(AMuEarth(), rLeo, 0.0), 1)));
PrintLn(StrConcat("Transferzeit LEO->GEO: ", StrConcat(f(AHohmannTime(AMuEarth(), rLeo, 42164000.0) / 3600.0, 2), " h")));
PrintLn("");
PrintLn("-- Ebenenaenderung --");
PrintLn(StrConcat("28.5 Grad im LEO: ", f(APlaneChangeDv(ACircularSpeed(AMuEarth(), rLeo), Grad(28.5)), 1)));
PrintLn(StrConcat("28.5 Grad im GEO: ", f(APlaneChangeDv(ACircularSpeed(AMuEarth(), 42164000.0), Grad(28.5)), 1)));
PrintLn(StrConcat("90 Grad im LEO: ", f(APlaneChangeDv(ACircularSpeed(AMuEarth(), rLeo), Grad(90.0)), 1)));
return 0;
}
Ausgabe:
-- Kreisbahnen --
LEO 400 km | a 6778 km | v 7669 m/s | T 92.6 min
SSO 700 km | a 7078 km | v 7504 m/s | T 98.8 min
MEO GPS 20180 km | a 26558 km | v 3874 m/s | T 717.9 min
MEO Galileo | a 29600 km | v 3670 m/s | T 844.7 min
GEO | a 42164 km | v 3075 m/s | T 1436.1 min
-- Ellipsenbahnen --
GTO 200 x 35786 | a 24371 km | T 10.52 h | vp 10239 | va 1597
Molniya 600x39750 | a 26553 km | T 11.96 h | vp 9961 | va 1507
Tundra 27353x44219 | a 42164 km | T 23.93 h | vp 3766 | va 2510
-- Uebergaenge ab LEO 400 km --
-> GEO (Hohmann): 3854.0
-> GPS-MEO: 3414.9
-> Fluchtgeschw.: 10845.0
-> Flucht-dv ab LEO: 3176.4
Transferzeit LEO->GEO: 5.29 h
-- Ebenenaenderung --
28.5 Grad im LEO: 3775.3
28.5 Grad im GEO: 1513.7
90 Grad im LEO: 10845.0
**Teil C — die fünf Familien aus Abschnitt 4:**
unit main;
import std.astro.orbit;
import std.astro.groundtrack;
import std.astro.cr3bp;
import std.astro.state;
import std.math;
import std.io;
import std.string;
fn f(v: f64, d: int64): pchar { return FloatToStr(v, d); }
fn G(r: f64): f64 { return r * 180.0 / Pi(); }
fn Rad(g: f64): f64 { return g * Pi() / 180.0; }
fn main(): int64 {
var w: f64 := 0.000072921158553;
PrintLn("-- Wiederholbahnen (#1993) --");
var a1: f64 := ASmaFromRepeatCycle(AMuEarth(), AJ2Earth(), ARadiusEarth(), w, 233.0, 16.0, 0.0, Rad(98.6));
PrintLn(StrConcat("233 Umlaeufe / 16 Tage: Hoehe ", StrConcat(f((a1-ARadiusEarth())/1000.0, 1), " km")));
PrintLn(StrConcat(" Nodalperiode ", StrConcat(f(ANodalPeriod(AMuEarth(), AJ2Earth(), ARadiusEarth(), a1, 0.0, Rad(98.6))/60.0, 2), " min")));
PrintLn(StrConcat(" Probe: Umlaeufe/Tag ", f(ARepeatCycleFromSma(AMuEarth(), AJ2Earth(), ARadiusEarth(), w, a1, 0.0, Rad(98.6)), 4)));
var a2: f64 := ASmaFromRepeatCycle(AMuEarth(), AJ2Earth(), ARadiusEarth(), w, 431.0, 29.0, 0.0, Rad(98.2));
PrintLn(StrConcat("431 Umlaeufe / 29 Tage: Hoehe ", StrConcat(f((a2-ARadiusEarth())/1000.0, 1), " km")));
PrintLn("");
PrintLn("-- Frozen Orbits (#1996) --");
PrintLn(StrConcat("J3 der Erde: ", f(AJ3Earth(), 9)));
PrintLn(StrConcat("eingefrorenes Argument ", StrConcat(f(G(AFrozenArgPerigee()), 1), " Grad")));
var aF: f64 := ARadiusEarth() + 800000.0;
var eF: f64 := AFrozenEccentricity(AJ2Earth(), AJ3Earth(), ARadiusEarth(), aF, Rad(98.6));
PrintLn(StrConcat("e bei 800 km, i=98.6: ", f(eF, 7)));
PrintLn(StrConcat(" Perigaeum ", StrConcat(f((aF*(1.0-eF)-ARadiusEarth())/1000.0, 1), " km")));
PrintLn(StrConcat(" Apogaeum ", StrConcat(f((aF*(1.0+eF)-ARadiusEarth())/1000.0, 1), " km")));
PrintLn("");
PrintLn("-- Bahnverfall (#1994) --");
PrintLn(StrConcat("400 km, beta=50: je Umlauf ", StrConcat(f(ADecayPerRev(0.00000000002, 50.0, ARadiusEarth()+400000.0), 1), " m")));
PrintLn(StrConcat(" je Tag ", StrConcat(f(ADecayRate(AMuEarth(), 0.00000000002, 50.0, ARadiusEarth()+400000.0)*86400.0, 0), " m")));
PrintLn(StrConcat("300 km, beta=50: je Tag ", StrConcat(f(ADecayRate(AMuEarth(), 0.0000000002, 50.0, ARadiusEarth()+300000.0)*86400.0, 0), " m")));
PrintLn("");
PrintLn("-- Bodenspur (#1995) --");
var jd: f64 := 2460000.5;
var gmst: f64 := AGmst(jd);
PrintLn(StrConcat("GMST am JD 2460000.5: ", StrConcat(f(G(gmst), 4), " Grad")));
var eci: AVec3 := AVec(6778137.0, 0.0, 0.0);
var ecef: AVec3 := AEciToEcef(eci, gmst);
PrintLn(StrConcat("Unterpunkt Breite: ", StrConcat(f(G(ASubPointLatitude(eci)), 4), " Grad")));
PrintLn(StrConcat("Unterpunkt Laenge: ", StrConcat(f(G(ASubPointLongitude(eci, gmst)), 4), " Grad")));
PrintLn(StrConcat("Hoehe ueber Kugelerde: ", StrConcat(f(ASubPointAltitude(eci, ARadiusEarth())/1000.0, 1), " km")));
PrintLn("");
PrintLn("-- Librationspunkte (#1997) --");
var muEM: f64 := AMuEarthMoon();
var muSE: f64 := AMuSunEarth();
PrintLn(StrConcat("mu Erde-Mond: ", f(muEM, 7)));
PrintLn(StrConcat("mu Sonne-Erde: ", f(muSE, 9)));
var l1: AVec3 := ALagrange1(muSE);
var l2: AVec3 := ALagrange2(muSE);
PrintLn(StrConcat("Sonne-Erde L1, Abstand zur Erde: ", StrConcat(f(ADistanceToSecondary(l1, muSE, 149597870700.0)/1000.0, 0), " km")));
PrintLn(StrConcat("Sonne-Erde L2, Abstand zur Erde: ", StrConcat(f(ADistanceToSecondary(l2, muSE, 149597870700.0)/1000.0, 0), " km")));
PrintLn(StrConcat("Erde-Mond L1, Abstand zum Mond: ", StrConcat(f(ADistanceToSecondary(ALagrange1(muEM), muEM, 384400000.0)/1000.0, 0), " km")));
PrintLn(StrConcat("Hill-Radius der Erde: ", StrConcat(f(AHillRadius(149597870700.0, muSE)/1000.0, 0), " km")));
return 0;
}
Ausgabe:
-- Wiederholbahnen (#1993) --
233 Umlaeufe / 16 Tage: Hoehe 700.3 km
Nodalperiode 98.90 min
Probe: Umlaeufe/Tag 14.5625
431 Umlaeufe / 29 Tage: Hoehe 604.6 km
-- Frozen Orbits (#1996) --
J3 der Erde: -0.000002532
eingefrorenes Argument 90.0 Grad
e bei 800 km, i=98.6: 0.0010274
Perigaeum 792.6 km
Apogaeum 807.4 km
-- Bahnverfall (#1994) --
400 km, beta=50: je Umlauf -115.5 m
je Tag -1796 m
300 km, beta=50: je Tag -17831 m
-- Bodenspur (#1995) --
GMST am JD 2460000.5: 154.6019 Grad
Unterpunkt Breite: 0.0000 Grad
Unterpunkt Laenge: -154.6019 Grad
Hoehe ueber Kugelerde: 400.0 km
-- Librationspunkte (#1997) --
mu Erde-Mond: 0.0121506
mu Sonne-Erde: 0.000003003
Sonne-Erde L1, Abstand zur Erde: 1491551 km
Sonne-Erde L2, Abstand zur Erde: 1501532 km
Erde-Mond L1, Abstand zum Mond: 58019 km
Hill-Radius der Erde: 1496557 km
===== 6. Kurzantwort auf die Ausgangsfrage =====
* **Vollständig abgedeckt:** LEO, ISS-, Tiangong- und Hubble-Bahn, polar, MEO, GTO, GEO, HEO — Geschwindigkeit, Periode, Bahnelemente, Transfers, Ebenenwechsel, Flucht.
* **Seit [[https://github.com/SEOLizer/LyX-Compiler/issues/1988|#1988]] ebenfalls auslegbar:** SSO (Neigung aus der Bahnhöhe), Molniya und Tundra (kritische Neigung, mit Nachweis über den Apsidendrift). Dazu die Knoten- und Apsidendrift jeder beliebigen Bahn.
* **Seit [[https://github.com/SEOLizer/LyX-Compiler/issues/1993|#1993]]…[[https://github.com/SEOLizer/LyX-Compiler/issues/1997|#1997]] ebenfalls abgedeckt:** Wiederholbahnen, Frozen Orbits, Bahnverfall, Bodenspur ([[lyx_-_programmiersprache:units:astro:groundtrack|std.astro.groundtrack]]) und die fünf Librationspunkte ([[lyx_-_programmiersprache:units:astro:cr3bp|std.astro.cr3bp]]).
* **Nicht abgedeckt:** Halo-Bahnen oberhalb von rund 675 000 km Auslenkung, Strahlungsdruck, und ein Atmosphärenmodell, das die Dichte über der Höhe selbst liefert.