Хвиля 55 одним поглядом
Дослідник багатогранників
Усі 5 платонових і 13 архімедових тіл, відтворені за допомогою перспективної проєкції. Перетягуйте для обертання, прокручуйте для масштабування, вмикайте каркасний режим і підписи вершин. Формула Ейлера V−E+F=2 перевіряється в реальному часі.
Відкрити симуляцію →Косяк риб 3D
200 риб, керованих правилами Boids — розділенням, вирівнюванням і згуртованістю — з трьома шарами глибини для псевдо-3D реалістичності. Акула-хижак полює на косяк, викликаючи панічну втечу в радіусі 110 px.
Відкрити симуляцію →SPH-прорив дамби
300 частинок, керованих тиском, в'язкістю та гравітацією за методом SPH. Дамба з водою руйнується і розтікається контейнером. Забарвлення за швидкістю, тиском або густиною.
Відкрити симуляцію →🔷 Дослідник багатогранників
Багатогранники — тривимірні тіла, обмежені плоскими багатокутними гранями, — належать до найбільш вивчених об'єктів математики. Стародавні греки класифікували п'ять платонових тіл: опуклих багатогранників, усі грані яких є конгруентними правильними багатокутниками, а всі вершини еквівалентні. Архімед розширив цей перелік до 13 архімедових тіл: опуклих багатогранників із двома або більше типами граней-правильних багатокутників, які, тим не менш, залишаються вершинно-транзитивними.
Формула Ейлера для багатогранників
Леонард Ейлер (1752) відкрив, що для будь-якого опуклого багатогранника — і насправді для будь-якої однозв'язної багатогранної поверхні, гомеоморфної сфері, — кількість вершин V, ребер E і граней F задовольняє:
Формула узагальнюється: для поверхні роду g (тор має g=1) характеристика Ейлера дорівнює 2−2g. Тор задовольняє V−E+F=0. Цей зв'язок між комбінаторними властивостями (кількістю вершин/ребер/граней) і топологічними властивостями (родом) є наріжним каменем алгебраїчної топології.
П'ять платонових тіл та їхні групи симетрії
Платонові тіла відповідають скінченним групам обертань тривимірного простору. Їхні групи симетрії збігаються з групами обертальної симетрії цих тіл:
- Тетраедр — симетрія T (хіральна тетраедрична), 12 обертань.
- Куб і октаедр — симетрія O (октаедрична), 24 обертання. Ці два тіла є взаємно двоїстими.
- Додекаедр та ікосаедр — симетрія I (ікосаедрична), 60 обертань. Також двоїсті одне до одного.
Їх лише п'ять, тому що вимога правильності опуклого тіла обмежує можливі комбінації граней-правильних багатокутників, що сходяться у вершині: сума кутів граней у кожній вершині повинна бути строго меншою за 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
- Розділення (Separation) — ухилення від сусідів у межах радіуса rsep, щоб уникнути зіткнень.
- Вирівнювання (Alignment) — рух у напрямку середнього курсу сусідів у межах rali.
- Згуртованість (Cohesion) — рух до центру мас сусідів у межах rcoh.
Сумарна керуюча сила на кожному тіку — це зважена сума:
Шарування за глибиною для псевдо-3D
Canvas 2D виконує 2D-симуляцію Boids, але три шари глибини імітують тривимірну структуру справжнього косяка риб. Поверхневі риби (шар 0) намальовані більшими та у світлішому бірюзовому кольорі; риби середнього шару (шар 1) — середнього розміру, кольору океанської блакиті; глибинні риби (шар 2) — менші та темно-синього кольору. Шари використовують дещо різні радіуси Boids, тому вони утримують окремі підкосяки, водночас впливаючи одне на одного через радіуси згуртованості та вирівнювання.
Акула-хижак
Акула — це окремий агент із власною мисливською поведінкою:
-
На кожному тіку акула рухається до найближчої риби в межах
huntRadius. -
Риби в межах
panicRadius(110 px) переходять у режим паніки: їхня вага розділення різко зростає, і вони додають сильний вектор втечі, спрямований прямо від акули. - Перелякані риби набувають жовтого кольору — у справжніх косяках анчоусів бліде забарвлення під час стресу є задокументованим явищем, можливо, пов'язаним зі зниженою активацією іридофорів.
- Якщо акула ловить рибу (відстань < 8 px), риба відроджується у випадковій точці на краю, імітуючи статистичну майже сталість розміру косяка попри хижацтво.
Підрахунок кластерів
Панель статистики показує кількість окремих кластерів у кожному кадрі. Належність до кластера визначається простим алгоритмом union-find: дві риби належать до одного кластера, якщо відстань між ними менша за радіус згуртованості. Під час звичайного руху зграєю кількість зазвичай становить 1–3; під час атаки акули вона часто підскакує до 6–10, оскільки косяк розпадається.
💧 SPH-прорив дамби — метод згладжених частинок гідродинаміки
Метод згладжених частинок гідродинаміки (SPH) був винайдений одночасно й незалежно Люсі (1977) та Гінголдом і Монаганом (1977) для моделювання астрофізичних явищ, таких як зіткнення зірок. На відміну від сітчастих (ейлерових) методів, SPH є повністю лагранжевим: рідина дискретизується на частинки, що несуть масу, швидкість і термодинамічні змінні. Сітка не потрібна — самі частинки визначають обчислювану область.
Апроксимація SPH
Будь-яку польову величину A в положенні r можна апроксимувати зваженою сумою внесків сусідніх частинок:
Сили тиску та в'язкості
Спочатку для кожної частинки обчислюється густина із суми Poly6. Потім тиск виводиться із простого рівняння стану:
Сила тиску на частинку i від усіх сусідів j дорівнює:
Стабільність: підкроки та демпфування
Симуляція виконує 3 підкроки на кожен кадр анімації з фіксованим
dt = 0,004 с. Пружне відбиття від меж
використовує коефіцієнт демпфування 0,4, тому кінетична енергія
втрачається під час контакту зі стінкою — це моделює непружну
природу реальних меж бетон/рідина. Для N ≤ 600 пошук сусідів
O(N²) виконується в одному циклі JS з частотою 60 fps на
сучасному обладнанні; прискорення на основі сітки (просторове
хешування) дозволило б розширити межу до ~5000 частинок.