Хвиля 55: Дослідник багатогранників, Косяк риб 3D і SPH-прорив дамби

Переглядач геометричних тіл, симуляція зграйної поведінки Boids із хижою акулою та SPH-прорив дамби в реальному часі — три дуже різні дослідження математики, колективної поведінки та обчислювальної гідродинаміки, додані до mysimulator.uk у хвилі 55.

Хвиля 55 одним поглядом

3
нові симуляції
6
HTML-файлів
541
усього симуляцій
1
стаття в блозі
🔷

Дослідник багатогранників

Усі 5 платонових і 13 архімедових тіл, відтворені за допомогою перспективної проєкції. Перетягуйте для обертання, прокручуйте для масштабування, вмикайте каркасний режим і підписи вершин. Формула Ейлера V−E+F=2 перевіряється в реальному часі.

Відкрити симуляцію →
🐟

Косяк риб 3D

200 риб, керованих правилами Boids — розділенням, вирівнюванням і згуртованістю — з трьома шарами глибини для псевдо-3D реалістичності. Акула-хижак полює на косяк, викликаючи панічну втечу в радіусі 110 px.

Відкрити симуляцію →
💧

SPH-прорив дамби

300 частинок, керованих тиском, в'язкістю та гравітацією за методом SPH. Дамба з водою руйнується і розтікається контейнером. Забарвлення за швидкістю, тиском або густиною.

Відкрити симуляцію →

🔷 Дослідник багатогранників

Багатогранники — тривимірні тіла, обмежені плоскими багатокутними гранями, — належать до найбільш вивчених об'єктів математики. Стародавні греки класифікували п'ять платонових тіл: опуклих багатогранників, усі грані яких є конгруентними правильними багатокутниками, а всі вершини еквівалентні. Архімед розширив цей перелік до 13 архімедових тіл: опуклих багатогранників із двома або більше типами граней-правильних багатокутників, які, тим не менш, залишаються вершинно-транзитивними.

Формула Ейлера для багатогранників

Леонард Ейлер (1752) відкрив, що для будь-якого опуклого багатогранника — і насправді для будь-якої однозв'язної багатогранної поверхні, гомеоморфної сфері, — кількість вершин V, ребер E і граней F задовольняє:

V − E + F = 2 — це топологічний інваріант, а не геометричний. Для тетраедра: 4−6+4=2; для додекаедра: 20−30+12=2; для зрізаного ікосаедра (футбольний м'яч): 60−90+32=2. Число 2 — це характеристика Ейлера сфери.

Формула узагальнюється: для поверхні роду g (тор має g=1) характеристика Ейлера дорівнює 2−2g. Тор задовольняє V−E+F=0. Цей зв'язок між комбінаторними властивостями (кількістю вершин/ребер/граней) і топологічними властивостями (родом) є наріжним каменем алгебраїчної топології.

П'ять платонових тіл та їхні групи симетрії

Платонові тіла відповідають скінченним групам обертань тривимірного простору. Їхні групи симетрії збігаються з групами обертальної симетрії цих тіл:

Їх лише п'ять, тому що вимога правильності опуклого тіла обмежує можливі комбінації граней-правильних багатокутників, що сходяться у вершині: сума кутів граней у кожній вершині повинна бути строго меншою за 360°. Лише трикутники, квадрати та п'ятикутники дають коректні розв'язки, поки цей кутовий дефіцит не вичерпується.

Перспективна проєкція на Canvas 2D

Симулятор використовує чисту перспективну проєкцію Canvas 2D: кожна 3D-вершина (x, y, z) спершу обертається двома матрицями, похідними від кватерніонів (рискання та тангаж, що оновлюються на кожному тіку перетягування), а потім проєктується на екран за формулою sx = cx + f·X/(Z+d), sy = cy + f·Y/(Z+d), де f — фокусна відстань, а d — зміщення камери. Грані сортуються за алгоритмом художника за Z-координатою центроїда, щоб забезпечити правильний порядок глибини.

🐟 Косяк риб 3D — Boids із хижаком

У 1986 році Крейг Рейнольдс опублікував модель Boids — оманливо просту модель, що породжує вражаюче реалістичну зграйну поведінку лише з трьох локальних правил. Жоден глобальний координатор не керує зграєю; кожен агент реагує лише на своїх сусідів у межах радіуса сприйняття. Емерджентний результат виглядає невідрізненним від справжнього шпакового рою (мурмурації) чи косяка анчоусів.

Три правила Boids

Сумарна керуюча сила на кожному тіку — це зважена сума:

F = wsep·Fsep + wali·Fali + wcoh·Fcoh — після чого обмежується максимальним прискоренням. Швидкість оновлюється методом інтегрування Ейлера та нормалізується до цільового діапазону швидкостей [vmin, vmax].

Шарування за глибиною для псевдо-3D

Canvas 2D виконує 2D-симуляцію Boids, але три шари глибини імітують тривимірну структуру справжнього косяка риб. Поверхневі риби (шар 0) намальовані більшими та у світлішому бірюзовому кольорі; риби середнього шару (шар 1) — середнього розміру, кольору океанської блакиті; глибинні риби (шар 2) — менші та темно-синього кольору. Шари використовують дещо різні радіуси Boids, тому вони утримують окремі підкосяки, водночас впливаючи одне на одного через радіуси згуртованості та вирівнювання.

Акула-хижак

Акула — це окремий агент із власною мисливською поведінкою:

Динаміка «хижак-жертва» в моделях Boids відтворює кілька польових спостережень: (а) косяки розпадаються на фрагменти, коли з'являється хижак, а потім знову збираються після його зникнення — ефект фонтану; (б) хижак найуспішніше атакує самотніх або периферійних риб; (в) косяк із N риб у щільному строю дає кожному члену лише 1/N ймовірності бути з'їденим порівняно з самотньою рибою — ефект розведення.

Підрахунок кластерів

Панель статистики показує кількість окремих кластерів у кожному кадрі. Належність до кластера визначається простим алгоритмом union-find: дві риби належать до одного кластера, якщо відстань між ними менша за радіус згуртованості. Під час звичайного руху зграєю кількість зазвичай становить 1–3; під час атаки акули вона часто підскакує до 6–10, оскільки косяк розпадається.

💧 SPH-прорив дамби — метод згладжених частинок гідродинаміки

Метод згладжених частинок гідродинаміки (SPH) був винайдений одночасно й незалежно Люсі (1977) та Гінголдом і Монаганом (1977) для моделювання астрофізичних явищ, таких як зіткнення зірок. На відміну від сітчастих (ейлерових) методів, SPH є повністю лагранжевим: рідина дискретизується на частинки, що несуть масу, швидкість і термодинамічні змінні. Сітка не потрібна — самі частинки визначають обчислювану область.

Апроксимація SPH

Будь-яку польову величину A в положенні r можна апроксимувати зваженою сумою внесків сусідніх частинок:

A(r) ≈ Σⱼ (mⱼ/ρⱼ) Aⱼ W(|rrⱼ|, h) — де W — згладжувальне ядро, а h — довжина згладжування. Ядро Poly6 W(r,h) = (315/64πh⁹)(h²−r²)³ використовується для густини, тоді як градієнт ядра Spiky (Мунафо, 1992, у виправленні Дебрюна, 1996) використовується для тиску, щоб уникнути скупчення частинок: ∇Wspiky = −(45/πh⁶)(h−r)² r̂.

Сили тиску та в'язкості

Спочатку для кожної частинки обчислюється густина із суми Poly6. Потім тиск виводиться із простого рівняння стану:

p = k(ρ − ρ₀) — лінеаризоване рівняння Тейта. k — жорсткість тиску (обернена до стисливості); ρ₀ — густина спокою. Більше значення k робить рідину менш стисливою, але вимагає менших кроків за часом.

Сила тиску на частинку i від усіх сусідів j дорівнює:

Fpres = −mⱼ (pᵢ+pⱼ)/(2ρⱼ) ∇Wspiky — симетричне усереднення (pᵢ+pⱼ)/2 забезпечує збереження лінійного імпульсу. В'язкість використовує лапласіан ядра ∇²Wvisc = (45/πh⁶)(h−r) для згладжування різниці швидкостей між частинками.

Стабільність: підкроки та демпфування

Симуляція виконує 3 підкроки на кожен кадр анімації з фіксованим dt = 0,004 с. Пружне відбиття від меж використовує коефіцієнт демпфування 0,4, тому кінетична енергія втрачається під час контакту зі стінкою — це моделює непружну природу реальних меж бетон/рідина. Для N ≤ 600 пошук сусідів O(N²) виконується в одному циклі JS з частотою 60 fps на сучасному обладнанні; прискорення на основі сітки (просторове хешування) дозволило б розширити межу до ~5000 частинок.

Практичні застосування SPH: симуляція води в Half-Life 2 та багатьох сучасних ігрових рушіях; прогнозування прибережних повеней і моделі накату цунамі; краш-тести паливних баків; злиття подвійних зірок та викиди наднових в астрофізиці; симуляція кровотоку в церебральних аневризмах; формування металу та високошвидкісний удар в аерокосмічній інженерії.
← Девлог №74: Синхронізація Ван дер Поля, бактеріальний хемотаксис і генетична еволюція Індекс блогу →