Дві окремі фізичні задачі, одна за одною
Фейерволік шоу насправді складається з двох незалежних фізичних задач, які пов'язані між собою. По-перше, задача про тіло, що рухається (проєктіль): снаряд запускається, слідує параболічної форми траєкторії під впливом сили тяжіння та опору повітря і досягає точки вибуху. По-друге, задача про розповсюдження частинок: в цей момент з десятків до сотень палаючих зірок одночасно вивільняються у всіх напрямках, і кожна з них стає своїм маленьким проєктилем, піддаючись тому ж закону тяжіння та опору повітря, що й снаряд, але починаючи рух з різної швидкості.
Запуск: гравітація та тертя разом
Без опору повітрям, запущена оболонка слідуватиме ідеальному параболу — результат класичної проєктної траєкторії. Реальні феєрверки легкі для свого розміру та рухаються швидко, тому тертя не є доповненням, а ключовим терміном: сила тертя росте квадратом швидкості, тому вона домінує на ранніх еталах польоту і менше впливає, коли оболонка сповільнюється біля вершини своєї дуги.
a = g - (drag_coeff * |v| * v) / mass // тертя протидіє швидкості, залежить від v² v += a * dt x += v * dt Це пояснює, чому реальні феєрверки схожі на те, як вони сповільнюються та згинають шлях біля вершини, а не відслідковують математично чисту параболу — тертя швидше виснажує горизонтальну швидкість, ніж само по собі гравітація, що змінює траєкторію.
a = g - (drag_coeff * |v| * v) / mass // drag opposes velocity, scales with v² v += a * dt x += v * dt
Вибух: перетворення однієї швидкості на сотні
У точці вибуху власна швидкість кулі успадковується кожною зіркою, а потім кожна зірка отримує додатковий імпульс швидкості, що розповсюджується від центру – зазвичай зрахований приблизно рівномірно по сфері (або по кільцю для візерунка вибуху у формі кільця), тому форма набуває вигляду симетричної кулі, а не нерівномірного розливу. Це пояснює, чому розгортання феєрверку видимісно дрейфує в цілому в напрямку, в якому продовжувала рухатися куля, коли вибухнула, крім розгортання від центру: кінцева швидкість кожної зірки є швидкістю оболонки плюс радіальна швидкість вибуху, додані як вектори, а не дві незалежні від них рухи.
star.velocity = shell.velocity + randomOnSphere() * burstSpeed
Колір – це хімічна проблема, а не фізична.
Колір кожної зірки виникає внаслідок горіння металевих солей при температурі полум’я та випромінювання світла з певними довжинами хвиль, характерними для кожного елемента – солі стронцію горять червоним, барій палає зеленою, медь – блакитним, натрій – яскраво-жовтогарячим. Отримання чистого блакитного полум’я є найскладнішим завданням серед феєрверків, оскільки купівельні сполуки міді, які забезпечують гарний блакитний колір, схильні до розкладання при високих температурах, необхідних для яскравого вибуху, що змушує піротехніків боротися з цим питанням протягом понад століття – це компроміс між чистотою кольору та яскравістю.
Траєкторії, згасання та чому дисплей виглядає живо
Кожен зірковий об’єкт також спалахує і гасне протягом свого життєвого циклу — справжні зірки це маленькі кульки повільно горючої речовини, які в кінцевому підсумку вичерпаються, що імітується симуляцією через поступове згасання альфа-значення та часто зменшення радіусу протягом 1–3 секунд. Додайте короткий частинковий слід за кожним зірковим об’єктом (невелику кількість швидко зникаючих позицій з попередніх кількох кадрів) і вибух читається як яскрава смужка, а не твердий крапки, що є тим, що найбільше продає «вогняний» ефект — за основу фізики насправді береться лише гравітація плюс опір, застосовані до великої кількості частинок одночасно.
Frequently asked questions
Чому вибухи феєрверків здаються, ніби вони пливуть вбік під час розширення?
Це відбувається тому, що швидкість кожної зірки є власною швидкістю оболонки в момент вибуху плюс її власна швидкість розгону при вибуху, додані разом. Якщо оболонка рухалася б убік або вгору під час вибуху, вся розширювана сфера несла б цей рух, одночасно розповсюджуючи його.
Чому так важко зробити гарний синій феєрверк?
Синій колір виникає завдяки кунцовим сполукам, але хімія міді, яка дає чистий блакитний колір, схильна до розкладання при високих температурах, необхідних для яскравого та енергійного вибуху – тому піротехніки повинні балансувати між чистотою кольору та яскравістю, на відміну від червоного (стронцію) або зеленого (барію), які залишаються стабільними при більш високих температурах горіння.
Чи впливає опір повітря значуще для чогось настільки швидкого, як кулеметний снаряд феєрверку?
Так, суттєво – сила тертя залежить від швидкості в квадраті, тому вона найсильніша одразу після запуску, коли снаряд рухається найшвидше, і це пояснює, чому справжній кулеметний снаряд феєрверку згинається у видному вигибі замість того, щоб простежувати чисту параболу, яку б забезпечила лише гравітація.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Fireworks і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Fireworks