Віха у 100 симуляцій: запуск ракети та атмосферне входження

Симуляції №99 і №100 завжди мали бути особливими. Я обрав дві аерокосмічні класики — двоступеневу ракету на основі рівняння Ціолковського та фізично точну модель теплозахисного екрана при входженні в атмосферу — і саме на них перетнув позначку в 100 симуляцій. Розповідаю, як обидві були створені і що насправді означало досягти цього числа.

🎉 ВІХА 100 СИМУЛЯЦІЙ

Чому 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';
}

Категорія «Аерокосмос» — завершена, шість симуляцій

З цими двома додаваннями категорія аерокосмосу досягла шести симуляцій без жодної заглушки «скоро з'явиться»:

Роздуми про число 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 симуляцій.