Kamień milowy 100 symulacji: Start rakiety i wejście w atmosferę

Symulacje #99 i #100 od zawsze miały być czymś wyjątkowym. Wybrałem dwie klasyki kosmonautyki — dwustopniową rakietę napędzaną równaniem Ciołkowskiego oraz fizycznie dokładny model osłony termicznej podczas wejścia w atmosferę — i to na nich przekroczyłem granicę 100 symulacji. Oto jak obie powstały i jak naprawdę wyglądało osiągnięcie tej liczby.

🎉 KAMIEŃ MILOWY: 100 SYMULACJI

Dlaczego 100 ma znaczenie

Liczby są umowne. Sto symulacji nie różni się fundamentalnie od dziewięćdziesięciu dziewięciu. Ale kamienie milowe dają okazję, by się zatrzymać, spojrzeć wstecz na przebytą drogę i zaplanować kolejny etap. Kiedy doliczyłem się 98 ukończonych symulacji, celowo odłożyłem dwa tematy kosmiczne, które chciałem zrealizować od miesięcy — tak, by sam kamień milowy był zasłużony.

Kategoria kosmonautyki miała już wtedy cztery ukończone symulacje (mechanika orbitalna, ewolucja gwiazd, optyka atmosferyczna, układ słoneczny). Dodanie startu rakiety i wejścia w atmosferę zwiększyło ją do sześciu — wszystkie gotowe, wszystkie z pełnymi wersjami EN + UK, pakietami SEO i wpisami w mapie strony.

Symulacja #99 — Start rakiety (Ciołkowski)

Fizyka

Równanie rakietowe Konstantego Ciołkowskiego to jeden z najbardziej doniosłych wzorów w inżynierii:

Δv = v_e · ln(m₀ / m_f)

gdzie v_e to efektywna prędkość wypływu spalin, m₀ to masa początkowa (z paliwem), a m_f to masa końcowa (sucha). Zabójczy jest tu logarytm: by podwoić Δv, nie wystarczy podwoić ilości paliwa — trzeba podnieść stosunek mas do kwadratu. Dlatego właśnie istnieją rakiety wielostopniowe.

Co pokazuje symulacja

Symulacja realizuje dwustopniową rakietę z odczytem budżetu Δv na żywo. Każdy stopień ma konfigurowalny ciąg, impuls właściwy (Isp), masę suchą i masę paliwa. W miarę spalania paliwa masa spada, a przyspieszenie rośnie — można obserwować moment odłączenia pierwszego stopnia, gdy jego masa zostaje odrzucona i dla drugiego stopnia zaczyna się nowy, świeży budżet Ciołkowskiego.

Zwrot grawitacyjny jest modelowany przez prosty program pochylania — rakieta startuje pionowo, a następnie płynnie odchyla się w stronę horyzontu wraz ze wzrostem prędkości. Gdy zostaje osiągnięta prędkość orbitalna, błysk potwierdza „wejście na orbitę" i pokazuje pozostały budżet Δv.

// Krok całkowania Ciołkowskiego
const thrust = stage.thrust;          // N
const mdot   = thrust / (stage.isp * 9.80665);  // kg/s
const acc    = thrust / mass - g(altitude);
mass   -= mdot * dt;
vSpeed += acc * Math.sin(pitchAngle) * dt;
hSpeed += acc * Math.cos(pitchAngle) * dt;

Najtrudniejsza część: zwrot grawitacyjny

Dopracowanie programu pochylania zajęło więcej iteracji, niż się spodziewałem. Zbyt agresywny — i rakieta przewraca się, zanim zdąży nabrać wystarczającej prędkości; zbyt powolny — i budżet Δv zostaje pożarty przez straty grawitacyjne. Finalna implementacja wykorzystuje liniowy zwrot, który zaczyna się na wysokości 2 km i obraca rakietę od 90° (pionowo) do 0° (poziomo) w miarę zbliżania się prędkości pionowej do celu orbitalnego. To uproszczenie względem prawdziwego pojazdu, ale świetnie tłumaczy samą koncepcję.

Symulacja #100 — Wejście w atmosferę

Fizyka

Wejście w atmosferę to w równym stopniu problem inżynierii cieplnej, co dynamiki lotu. Tempo nagrzewania na tępo zakończonej osłonie termicznej opisuje przybliżenie Suttona-Gravesa:

q = k · √(ρ/R_n) · V³

gdzie ρ to lokalna gęstość powietrza, R_n to promień dziobu, V to prędkość, a k wynosi w przybliżeniu 1,83 × 10⁻⁴ (w jednostkach SI). Prędkość wchodzi do wzoru w trzeciej potędze — dlatego różnica między płytkim, powolnym wejściem a stromym i szybkim jest dramatyczna pod względem obciążenia cieplnego.

Co pokazuje symulacja

Pojazd startuje na wysokości 120 km na trajektorii wejścia zdefiniowanej przez użytkownika. Współczynnik oporu, promień dziobu i masa pojazdu są w pełni konfigurowalne. Podczas zniżania przez model atmosfery (wykładnicza skala wysokości gęstości) symulacja śledzi:

Zaprojektowanie systemu czterech możliwych wyników było świetną zabawą. Bardzo płytki kąt daje odbicie (pojazd odbija się od atmosfery jak płaski kamień od wody). Zbyt stromy — i tempo nagrzewania przekracza limit osłony termicznej — pojazd zostaje oznaczony jako zniszczony. „Złoty" korytarz, który prowadzi do bezpiecznego lądowania, jest znacznie węższy, niż większość ludzi się spodziewa: zwykle to zaledwie kilka stopni.

// Logika wyniku wejścia w atmosferę
if (altitude > 120_000 && flightPathAngle > -1) {
  outcome = 'skipout';
} else if (skinTemp > heatshieldLimit) {
  outcome = 'destroyed';
} else if (altitude < 10_000 && speed < 200) {
  outcome = 'parachute';
} else if (altitude <= 0) {
  outcome = speed < landingSpeed ? 'safe' : 'crash';
}

Kategoria „Kosmonautyka" — komplet sześciu symulacji

Dzięki tym dwóm dodatkom kategoria kosmonautyki osiągnęła sześć symulacji, bez ani jednej zaślepki „wkrótce":

Refleksje na temat liczby 100

Pierwsza symulacja — eksperyment z płynem SPH — powstała w jeden weekend w styczniu 2024 roku, tylko po to, by sprawdzić, czy Three.js poradzi sobie z tym w przeglądarce. To był Devlog #1. Dwa lata i dwa miesiące później jest ich sto — od obliczeń kwantowych, przez potencjały czynnościowe serca, po formowanie się galaktyk i korki drogowe.

Największym zaskoczeniem było to, jak wiele z nich pięknie działa w czystym Canvas 2D. Kiedy zaczynałem, zakładałem, że większość poważnych symulacji będzie wymagała WebGL. Okazało się, że requestAnimationFrame + dobrze zoptymalizowana pętla cząstek + ImageData do renderowania piksel po pikselu pokrywa ogromny obszar zastosowań. Three.js jest zarezerwowane dla prawdziwego 3D — wszystko inne działa komfortowo w Canvas 2D przy 60 FPS.

Statystyki kamienia milowego (symulacja #100): 6 symulacji kosmonautycznych · wszystkie EN + UK · pełne SEO + mapa strony · zero zaślepek „wkrótce" w kategorii.

Co było dalej

Przekroczenie setki nie było antyklimaksem, tylko naturalną kontynuacją. Zaraz po tym kamieniu milowym pojawiły się dwie kolejne symulacje — Bilans energetyczny Ziemi (zerowymiarowy model klimatyczny) oraz Cykl węglowy (czteroboxowy model ocean-atmosfera). Biblioteka miała rozpęd i nie było powodu, by zwalniać.

Sesje po setce przyniosły całkowicie nowe kategorie: biologię molekularną, percepcję, uczenie maszynowe, drzewa decyzyjne, robotykę, fizykę jądrową, naukę o sporcie, kryptografię, obliczenia kwantowe — każda z nich osiągnęła zero kart „wkrótce" zanim rozpoczęła się kolejna. W chwili publikacji tego wpisu licznik pokazuje 212 symulacji.