Показники платформи
Симуляції хвилі 32
Дифузійно-обмежена агрегація
Частинки виконують випадкові блукання, поки не торкнуться зростаючого кластера й не приклеяться назавжди. Отримане розгалужене дерево має фрактальну розмірність ~1.71.
Відкрити →Фазовий портрет
Візуалізатор фазової площини для 2D ОДР. Клацніть, щоб простежити траєкторії, інтегровані методом RK4. Накладення показують стрілки векторного поля, нуль-ізокліни та нерухомі точки.
Відкрити →Патерни Тюрінга
Реакційно-дифузійна система Грея-Скотта. П'ять пресетів — плями, смуги, лабіринт, мітоз, черв'яки — кожен відповідає окремим параметрам (F, k).
Відкрити →🌿 Дифузійно-обмежена агрегація
Алгоритм Віттена-Сандера
Віттен і Сандер представили DLA у своїй статті 1981 року «Diffusion-Limited Aggregation, a Kinetic Critical Phenomenon». Алгоритм оманливо простий: одна частинка закріплена в початку координат (зерно). Нові частинки постійно з'являються у випадковій точці на колі трохи за межами поточного радіуса кластера, а потім виконують випадкове блукання (±1 по x або y на кожному кроці). Щойно частинка потрапляє поряд із будь-якою вже наявною в кластері коміркою, вона назавжди застигає і стає частиною кластера. Повторити.
Гілки виникають тому, що частинки, які блукають далеко від кластера, з однаковою ймовірністю можуть наблизитися з будь-якого напрямку — але частинки глибоко у ввігнутій щілині навряд чи продифундують аж туди, перш ніж торкнуться кінчика гілки. Тому кінчики ростуть найшвидше й затіняють внутрішню частину, створюючи характерну дендритну структуру.
Деталі реалізації
-
Сітка: 500×500
Uint16Array. Значення комірки 0 = порожньо; значення ≥1 = порядок, у якому частинка приєдналася до кластера. Цей порядок керує кольоровим градієнтом (ранні частинки темніші, недавні — яскравіші). -
Радіус появи: блукальники з'являються на колі
радіусом
maxRadius + 5.maxRadius— це евклідова відстань від початку координат до найвіддаленішої комірки кластера, що оновлюється щоразу, коли частинка застигає. -
Умова знищення: блукальники, що виходять за межі
SIZE/2 − 2(половина краю сітки), відкидаються й породжуються заново. Це запобігає астрономічно довгому блуканню на великих сітках. - Повзунок липкості (0.1 – 1.0): коли блукальник знаходиться поруч із кластером, він застигає лише з імовірністю p = липкість. Нижча липкість дає щільніші, менш розгалужені структури, оскільки блукальники мають кілька шансів відійти від тонких кінчиків.
-
Форми зерна: точка, лінія, кільце, хрест — усі
працюють через виклик тієї самої функції
addToCluster(x,y); клітини зерна засівають початковий кластер до того, як почнуть діяти блукальники. -
Кілька блукальників за кадр: одночасно активні
1–40 блукальників. Кожен робить крок раз за підкадр; чотири
підкадри виконуються за один
requestAnimationFrame. Це дає ~60×4×40 = 9 600 кроків блукальників за секунду на типовому дисплеї. -
Оцінка фрактальної розмірності: відображається
як
Df =ln(N) / ln(R), де N — кількість частинок, а R —maxRadius. Теоретично ~1.71 у 2D; показник у реальному часі сходиться до цього значення в міру росту кластера.
Кольорові палітри
Шість палітр відображають індекс входження в кластер
(нормалізований від 0 до 1 відносно maxParticles) у
трійку RGB: смарагдова, золота, крижана, полум'яна, фіолетова та
монохромна. Перемикання палітри запускає повне перемальовування
всіх пікселів ImageData N×N зі
збереженої сітки, тож жодні дані про частинки не втрачаються.
Що спробувати
- Встановіть липкість 0.2 і порівняйте щільніший кластер із липкістю 1.0 — фрактальна розмірність помітно зменшується.
- Використайте зерно у формі хреста або кільця, щоб виростити симетричні кластери; форма зерна зберігається в топології розгалужень.
- Підвищте максимальну кількість частинок до 20 000 і дайте симуляції попрацювати, щоб побачити, як фрактальна розмірність сходиться до теоретичних 1.71.
🔄 Фазовий портрет
Навіщо фазові площини?
Двовимірну автономну систему ОДР ẋ = f(x,y), ẏ = g(x,y) для більшості цікавих f і g неможливо розв'язати аналітично — але її поведінку можна повністю охарактеризувати геометрично. Фазова площина — це система координат (x, y); у кожній точці ми малюємо маленьку стрілку в напрямку (f, g). Траєкторії — це криві, що течуть уздовж цих стрілок. Нерухомі точки (де стрілки зникають) класифікуються як вузли, спіралі, сідла або центри — класифікація, для якої потрібні лише власні значення якобіана.
Шість класичних систем
- Лотка-Вольтерра — хижак-жертва; нейтрально стійкі замкнені орбіти навколо рівноваги співіснування, без спірального стоку, оскільки система консервативна.
- Ван дер Поль — μ = 2; жорсткий релаксаційний осцилятор з однією нестійкою нерухомою точкою в початку координат, оточеною єдиним стійким граничним циклом.
- Маятник — нелінійне θ̈ + 0.25θ̇ + sin θ = 0; демпфовані стійкі спіралі при цілих кратних 2π, сідлові точки при непарних кратних π.
- Біфуркація Гопфа — ṙ = r(1−r²) у декартовій формі; ідеальний коловий граничний цикл при r = 1, до якого сходяться всі траєкторії.
- Сідло-вузол — ẋ = x²−1, ẏ = −y; стійкий вузол у (−1, 0) і сідло в (+1, 0), де вісь y є сепаратрисою.
- Спіральний стік — лінійна система з власними значеннями −0.2 ± i; усі траєкторії закручуються всередину з однаковою кутовою частотою.
Реалізація: інтегрування RK4
Траєкторії інтегруються класичним методом Рунге-Кутти 4-го порядку.
Кожен виклик rk4(x, y, dt) обчислює f і g
чотири рази (у поточній точці, двох проміжних точках і
передбаченій кінцевій точці) і комбінує їх з вагами 1/6, 1/3, 1/3,
1/6. Крок часу dt = 0.03, і до 6 кроків RK4
виконується за один виклик requestAnimationFrame.
Траєкторії автоматично припиняються, якщо виходять за межі радіуса
знищення, що дорівнює 3× діапазону перегляду.
Нуль-ізокліни
x-нуль-ізоклина (червона) — це множина точок, де ẋ = 0 — траєкторії перетинають її, рухаючись вертикально. y-нуль-ізоклина (синя) — де ẏ = 0 — траєкторії перетинають її, рухаючись горизонтально. Їхні перетини завжди є нерухомими точками. Обидві обчислюються шляхом сканування сітки 300×300 фазової площини та виявлення змін знака стовпець за стовпцем (для x-нуль-ізокліни) або рядок за рядком (для y-нуль-ізокліни), з лінійною інтерполяцією до субсіткової точності.
Що спробувати
- Натисніть «Auto-seed», щоб заповнити фазову площину траєкторіями й одразу побачити глобальну структуру потоку.
- У системі Лотка-Вольтерра клацніть біля нерухомої точки (2, 1.5) і спостерігайте замкнену орбіту; клацніть далі, щоб отримати більшу орбіту.
- У системі Ван дер Поля клацніть біля початку координат (нестійкий) і подивіться, як спіраль розширюється назовні до граничного циклу.
- Вимкніть нуль-ізокліни, щоб зменшити візуальний шум під час вивчення форм траєкторій.
🐆 Патерни Тюрінга
Прозріння Тюрінга 1952 року
У своїй статті «The Chemical Basis of Morphogenesis» (1952) Алан Тюрінг математично показав, що два хімічні види з різними коефіцієнтами дифузії можуть самовільно порушувати трансляційну симетрію — починаючи з майже однорідного розподілу, система підсилюватиме малі просторові флуктуації й встановлюватиметься у стійкий просторово-періодичний патерн.
Ключовий механізм — локальна самоактивація з далекосяжним латеральним пригніченням. Активатор U каталізує власне виробництво, а також виробляє інгібітор V, але V дифундує швидше за U. Тому невеликий сплеск U створює локальний надлишок V, який пригнічує U в навколишній області, вирізаючи характерну довжину хвилі патерну.
Модель Грея-Скотта
Грей і Скотт (1984) представили чисту реакційну схему, яка демонструє широку різноманітність патернів Тюрінга залежно від двох параметрів:
∂U/∂t = DU∇²U − UV² + F(1−U)
∂V/∂t = DV∇²V + UV² − (F+k)V
Тут UV² — автокаталітичний член (U і V реагують,
утворюючи більше V), F(1−U) підживлює U з резервуару,
а (F+k)V видаляє V. Фіксовані параметри:
DU = 0.16 і DV = 0.08
(тобто U дифундує вдвічі швидше за V). Пресети охоплюють
карту параметрів, вперше задокументовану Пірсоном (1993):
- Плями (F=0.035, k=0.065) — ізольовані області з високим V у морі низького V, аналогічно плямам леопарда чи візерункам косатки.
- Смуги (F=0.060, k=0.062) — паралельні смуги, аналогічно смугам зебри чи візерункам тигра.
- Лабіринт (F=0.040, k=0.060) — з'єднані канали у формі лабіринту, поширений патерн у гребенях відбитків пальців.
- Мітоз (F=0.028, k=0.053) — плями, що періодично діляться й множаться, імітуючи поділ клітин.
- Черв'яки (F=0.078, k=0.061) — звивисті видовжені плями, що повільно дрейфують по сітці.
Реалізація: 9-точковий лапласіан, інтегрування Ейлера
Симуляція працює на періодичній сітці 200×200 з парами
подвійних буферів Float32Array. Дискретний лапласіан
використовує 9-точковий шаблон з вагами 0.05 для чотирьох
діагональних сусідів і 0.20 для чотирьох кардинальних сусідів (у
сумі дають 1 мінус вагу центру −1), що забезпечує кращу ізотропію,
ніж стандартний 5-точковий шаблон. Інтегрування — прямий метод
Ейлера з dt = 1.0; це чисельно стійко,
оскільки DU ≤ 0.16 < 0.25 (межа стійкості
CFL для цього шаблону).
П'ять кольорових палітр (бурштинова, океанічна, плазмова,
нефритова, монохромна) лінійно відображають поле концентрації U від
фону до переднього плану. Цикл рендерингу пише безпосередньо в
буфер пікселів ImageData для максимальної пропускної
здатності — без проміжних рядків CSS-кольорів.
Ініціалізація: засіяні плями
Сітка починається зі значень U ≈ 1, V ≈ 0 всюди (тривіальна нерухома точка), з крихітним випадковим шумом для порушення симетрії. Дванадцять маленьких кругових плям радіусом 4 засіваються значеннями U = 0.5, V = 0.25. Вони діють як центри нуклеації; без них самого шуму знадобилося б набагато більше часу, щоб засіяти патерн. Кінцевий патерн не залежить від позицій зерен — лише (F, k) визначає, який тип патерну зрештою виникне.
Що спробувати
- Перемикайтеся між пресетами й дивіться, як існуючий патерн розчиняється, а формується новий — перехідний процес часто цікавіший за стійкий стан.
- Спробуйте пресет «Мітоз»: можна побачити, як окремі плями діляться на дві дочірні й розходяться.
- Підвищте швидкість до 20 кроків за кадр, щоб досягти стійкого стану за секунди; знизьте до 1, щоб спостерігати еволюцію патерну в уповільненому русі.
- Натискання Reset на пресеті «Лабіринт» щоразу дає інший лабіринт — стійкий стан унікальний за типом, але не в мікроскопічних деталях.
Технічні нотатки
-
Малювання ImageData для DLA — щоразу, коли нова
частинка приклеюється, у буфер
ImageDataмалюється лише один її піксель; увесь викликputImageDataвсе ще O(N²), але уникає операцій зі стрічками, що потребують збирання сміття, на кожен піксель. - Фазовий портрет — виявлення нуль-ізоклін сканує підсітку 300×300 окремо для кожного стовпця (x-нуль-ізоклина) і кожного рядка (y-нуль-ізоклина), шукаючи перетини нуля для f або g відповідно; зміна знака ⇒ лінійна інтерполяція до субкомірної точності.
- Стійкість Грея-Скотта — прямий метод Ейлера умовно стійкий для дифузійної частини, коли D < 1/(4 × dt), тобто D < 0.25 при dt = 1. Обидва DU = 0.16 і DV = 0.08 задовольняють цю умову; реакційні члени обмежені й не загрожують стійкості.
-
Усі симуляції хвилі 32 виходять з повними сторінками EN + UK і
зареєстровані в
simulations.json.
Теги
DLA Фрактали Випадкове блукання Фрактальна розмірність Фазовий портрет Динамічні системи Ван дер Поль Лотка-Вольтерра RK4 Патерни Тюрінга Реакційна дифузія Грей-Скотт Морфогенез Хвиля 32
Огляд хвилі 33
Три симуляції заплановано для хвилі 33:
- Діаграма Вороного — інтерактивна обчислювальна геометрія; додавайте точки-зерна й спостерігайте, як комірки Вороного та тріангуляція Делоне оновлюються в реальному часі.
- Подвійний маятник — хаотична динаміка дволанкового маятника; візуалізуйте чутливість до початкових умов за допомогою кількох одночасних траєкторій.
- Нейрон Ходжкіна-Хакслі — модель генерації потенціалу дії, удостоєна Нобелівської премії; регулюйте провідність іонних каналів і спостерігайте зміну патерну спайків.
Усі симуляції хвилі 33 вийдуть із сторінками EN + UK у день запуску.