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:
- Opóźnienie (przeciążenia odczuwane przez załogę)
- Temperaturę poszycia na podstawie tempa nagrzewania Suttona-Gravesa
- Ślad kolorystyczny — niebieski (zimno) → pomarańczowy → biały (szczyt nagrzewania) → czerwony (niebezpieczeństwo)
- Wynik: bezpieczne lądowanie, odbicie od atmosfery, otwarcie spadochronu lub zniszczenie pojazdu
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":
- 🚀 Start rakiety — Ciołkowski, dwa stopnie, zwrot grawitacyjny
- 🌡️ Wejście w atmosferę — nagrzewanie Suttona-Gravesa, system wyników
- 🪐 Mechanika orbitalna — Kepler, orbity eliptyczne, transfer Hohmanna
- ⭐ Ewolucja gwiazd — klasyfikacja Morgana-Keenana, diagram Hertzsprunga-Russella
- 🌈 Optyka atmosferyczna — rozpraszanie Rayleigha, model koloru nieba
- ☀️ Układ słoneczny — wszystkie 8 planet, teksturowane, prawdziwe dane orbitalne
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.