Чому 100 має значення
Числа умовні. Сто симуляцій принципово не відрізняється від дев'яноста дев'яти. Але віхи дають нагоду зупинитися, озирнутися назад на пройдений шлях і спланувати наступний етап. Коли я нарахував 98 завершених симуляцій, я свідомо приберіг дві аерокосмічні теми, які хотів реалізувати місяцями — щоб сама віха відчувалась заслуженою.
Категорія аерокосмосу вже мала чотири завершені симуляції (орбітальна механіка, еволюція зірок, атмосферна оптика, сонячна система). Додавання запуску ракети та входження в атмосферу довело її до шести — усі готові, усі з повними версіями EN + UK, SEO-пакетами та записами в мапі сайту.
Симуляція №99 — Запуск ракети (Ціолковський)
Фізика
Рівняння ракети Костянтина Ціолковського — одна з найважливіших формул в інженерії:
Δv = v_e · ln(m₀ / m_f)
де v_e — ефективна швидкість витікання, m₀
— початкова (заправлена) маса разом із паливом, а m_f
— кінцева (суха) маса. Логарифм тут і є вбивчим фактором: щоб
подвоїти Δv, треба не подвоїти паливо — треба звести в квадрат
відношення мас. Саме тому й існують багатоступеневі ракети.
Що показує симуляція
Симуляція реалізує двоступеневу ракету з живим відображенням бюджету Δv. Кожна ступінь має налаштовувані тягу, питомий імпульс (Isp), суху масу та масу палива. Коли паливо вигорає, маса зменшується, а прискорення зростає — можна спостерігати момент відокремлення першого ступеня, коли його маса скидається і починається новий, свіжий бюджет Ціолковського для другого ступеня.
Гравітаційний розворот моделюється простою програмою тангажу — ракета стартує вертикально, а потім плавно вигинається до горизонту в міру набору швидкості. Коли досягнута орбітальна швидкість, спалах підтверджує «вихід на орбіту» і показує залишок бюджету Δv.
// Крок інтегрування Ціолковського
const thrust = stage.thrust; // Н
const mdot = thrust / (stage.isp * 9.80665); // кг/с
const acc = thrust / mass - g(altitude);
mass -= mdot * dt;
vSpeed += acc * Math.sin(pitchAngle) * dt;
hSpeed += acc * Math.cos(pitchAngle) * dt;
Найскладніша частина: гравітаційний розворот
Налаштувати правильну програму тангажу зайняло більше ітерацій, ніж очікувалося. Занадто агресивно — і ракета перекидається до того, як набере достатньо швидкості; занадто повільно — і бюджет Δv «з'їдають» гравітаційні втрати. Фінальна реалізація використовує лінійний розворот, що починається на висоті 2 км, обертаючись від 90° (вертикально) до 0° (горизонтально) у міру наближення вертикальної швидкості до орбітальної цілі. Це спрощено порівняно з реальним апаратом, але чудово навчає концепції.
Симуляція №100 — Атмосферне входження
Фізика
Атмосферне входження — це стільки ж задача теплотехніки, скільки й динаміки польоту. Швидкість нагрівання затупленого теплозахисного екрана визначається наближенням Саттона-Ґрейвса:
q = k · √(ρ/R_n) · V³
де ρ — локальна густина повітря, R_n —
радіус носової частини, V — швидкість, а k
приблизно дорівнює 1.83 × 10⁻⁴ (в одиницях СІ).
Швидкість входить у формулу в кубі — тому різниця між пологим,
повільним входженням і крутим, швидким виявляється драматичною за
рівнем теплового навантаження.
Що показує симуляція
Апарат стартує на висоті 120 км за заданою користувачем траєкторією входження. Коефіцієнт опору, радіус носової частини та маса апарата — усе налаштовується. У міру занурення в модель атмосфери (експоненційна шкала висоти густини) симуляція відстежує:
- Уповільнення (перевантаження, які відчуває екіпаж)
- Температуру обшивки на основі швидкості нагрівання Саттона-Ґрейвса
- Кольоровий слід — синій (холодно) → помаранчевий → білий (пік нагрівання) → червоний (небезпека)
- Результат: безпечна посадка, рикошет від атмосфери, розкриття парашута або руйнування апарата
Систему з чотирма результатами було цікаво проєктувати. Дуже пологий кут дає рикошет (апарат відскакує від атмосфери, як плаский камінець від води). Занадто крутий — і швидкість нагрівання перевищує межу теплозахисного екрана — апарат позначається як зруйнований. «Золотий» коридор, що дає безпечну посадку, набагато вужчий, ніж більшість людей очікує: зазвичай лише кілька градусів.
// Логіка результату входження в атмосферу
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';
}
Категорія «Аерокосмос» — завершена, шість симуляцій
З цими двома додаваннями категорія аерокосмосу досягла шести симуляцій без жодної заглушки «скоро з'явиться»:
- 🚀 Запуск ракети — Ціолковський, два ступені, гравітаційний розворот
- 🌡️ Атмосферне входження — нагрівання Саттона-Ґрейвса, система результатів
- 🪐 Орбітальна механіка — Кеплер, еліптичні орбіти, перехід Гоманна
- ⭐ Еволюція зірок — класифікація Моргана-Кінана, діаграма Герцшпрунга-Рассела
- 🌈 Атмосферна оптика — розсіювання Релея, модель кольору неба
- ☀️ Сонячна система — усі 8 планет, з текстурами, реальні орбітальні дані
Роздуми про число 100
Перша симуляція — експеримент з гідродинамікою SPH — була створена за вихідні в січні 2024 року просто, щоб перевірити, чи зможе Three.js обробити це в браузері. Це був Девлог #1. Через два роки і два місяці їх стало сто — від квантових обчислень до серцевих потенціалів дії до формування галактик до автомобільних заторів.
Найбільшим сюрпризом стало те, наскільки чудово багато з них
працюють у чистому Canvas 2D. Коли я починав, я
припускав, що більшість серйозних симуляцій вимагатимуть WebGL.
Виявилося, що requestAnimationFrame + добре
оптимізований цикл частинок + ImageData для
порядкового рендерингу покривають величезну частину задач.
Three.js залишається для справжньої 3D-графіки — усе інше чудово
працює в 2D-canvas на 60 FPS.
Статистика віхи (симуляція №100): 6 аерокосмічних симуляцій · усі EN + UK · повний SEO-пакет + мапа сайту · жодної заглушки «скоро з'явиться» в категорії.
Що було далі
Розвиток після позначки 100 відчувався природним, а не антикульмінаційним. Одразу після віхи з'явилися ще дві симуляції — «Енергетичний баланс Землі» (нульвимірна кліматична модель) та «Вуглецевий цикл» (чотирикоробкова модель океан-атмосфера). У бібліотеки був імпульс, і причин уповільнюватися не було.
Сесії після 100 принесли повністю нові категорії: молекулярна біологія, сприйняття, машинне навчання, дерева рішень, робототехніка, ядерна фізика, спортивна наука, криптографія, квантові обчислення — кожна з них досягла нуля заглушок «скоро з'явиться» до того, як розпочалась наступна. На момент публікації цього поста лічильник показує 212 симуляцій.