Що Демонструє

Ця симуляція моделює колективну поведінку тварин за алгоритмом Бойдів (1986). Кожна рибка дотримується трьох простих локальних правил — розділення, узгодження та єдності — проте загальний результат є реалістичним плинним косяком. Коли хижак-акула наближається, риби переходять до реакції втечі, породжуючи видовищну динаміку розсипання та возз'єднання.

Як Використовувати

Регулюйте Кількість риб, Швидкість та три радіуси сил зграї. Вмикайте/вимикайте хижака для порівняння косяку з загрозою та без. Великий радіус єдності збирає щільний косяк, великий радіус узгодження дає синхронізований рух.

Чи Знали Ви?

Косяки риб заплутують хижаків завдяки ефекту розгубленості — хижак, що цілиться в одну рибу, втрачає її в натовпі. Подібні до Бойдів моделі використовуються в анімації (наприклад, тупіт у «Король Лев») та координації автономних роїв дронів.

Про цю симуляцію

Ця симуляція відтворює модель зграї Бойдів (Крейг Рейнольдс, 1986) як псевдо-3D косяк риб з видом зверху. Кожна рибка сканує сусідів у межах трьох незалежних радіусів — розділення, узгодження та єдності — і поєднує отримані вектори керування у власний напрямок руху щокадру. Хижа акула додає четверту силу, втечу, яка перевизначає поведінку зграї, щойно рибка потрапляє в радіус паніки, породжуючи розсипання та повторне збирання косяку, що реальні зграї риб використовують для виживання під час полювання хижака.

🔬 Що це показує

200 риб (можна змінити від 50 до 400) розподілені по трьох шарах глибини, кожен зі своєю палітрою кольорів і розміром, тож косяки, що накладаються один на одного, виглядають як 3D-океан на 2D-полотні. Кожна рибка реагує лише на сусідів із сусідніх шарів, порівнюючи квадрат відстані з радіусами розділення (за замовчуванням 28px), узгодження (55px) та єдності (80px), щоб обчислити силу керування щокадру, а акула прямує до центру мас косяку, і риби тікають, щойно опиняються в межах радіуса паніки 110px.

🎮 Як користуватися

Перетягуйте повзунки Кількість риб і Швидкість, щоб змінити масштаб і темп, а потім розширюйте чи звужуйте три радіуси зграї, щоб побачити щільніші чи вільніші косяки, більш або менш синхронізовані повороти. Вмикайте/вимикайте Хижака, щоб порівняти спокійне плавання з панічною динамікою, і регулюйте Швидкість акули та Радіус паніки, щоб зробити полювання легшим чи важчим для втечі. Панель статистики в реальному часі показує кількість риб, кількість груп (пошук у ширину за радіусом єдності), риб у паніці та FPS.

💡 Чи знали ви?

Оригінальна стаття Рейнольдса про Бойдів 1987 року не потребувала лідера чи глобального зводу правил — зграї, косяки та стада виникають лише з трьох суто локальних правил, які одночасно виконує кожна особина. Реальні косяки риб використовують той самий трюк проти хижаків: акула, що цілиться в один силует у швидкому натовпі, постійно втрачає ціль — це називається ефектом розгубленості (confusion effect), і саме тому риби в цій симуляції розсипаються та перегруповуються, а не просто тікають по прямій.

Часті запитання

Які три правила Бойдів і що вони роблять?

Розділення відштовхує кожну рибку від сусідів, що опинилися занадто близько, запобігаючи зіткненням. Узгодження змушує рибку узгоджувати свій напрямок із середнім напрямком сусідів у межах радіуса узгодження, створюючи синхронізовані повороти. Єдність спрямовує рибку до середньої позиції сусідів у межах радіуса єдності, утримуючи групу разом. Усі три сили підсумовуються щокадру, утворюючи один підсумковий вектор керування для кожної рибки.

Чому риби виглядають так, ніби плавають у 3D на плоскому полотні?

Кожній рибці випадково призначається один із трьох шарів глибини з окремим розміром і кольоровою палітрою — більші та яскравіші риби для поверхневого шару, менші й темніші для глибинного. Риби зграюються лише з сусідами того самого або сусіднього шару, а малюються вони від найглибшого шару до найближчого щокадру, тож поєднання шарів і взаємного перекриття створює переконливу ілюзію глибини без жодної справжньої 3D-геометрії.

Як акула вирішує, де полювати?

Акула обчислює центроїд (середню позицію) усіх риб на екрані та прямує до нього з невеликим постійним прискоренням, обмеженим налаштуванням Швидкість акули. Вона не цілиться в окрему рибку — вона просто женеться за центром маси натовпу, тому косяк, що розділяється на два кластери, може справді збити акулу з пантелику й виграти час для втечі обох частин.

Що змушує рибку панікувати і як це змінює її поведінку?

Рибка переходить у режим паніки, коли потрапляє в радіус паніки акули; чим ближче вона, тим сильніша додаткова сила втечі, що штовхає її прямо від акули. Риби в паніці малюються попереджувальним жовто-оранжевим кольором, плавають до вдвічі швидше за звичайну максимальну швидкість і швидше вимахують хвостом, а паніка поступово згасає, коли акула більше не поруч.

Як обчислюється показник «Груп»?

Симуляція виконує пошук у ширину (flood-fill) по масиву риб: починаючи з ще не відвіданої рибки, вона додає до тієї самої групи всіх інших не відвіданих риб у межах радіуса єдності, а потім переходить до наступної не відвіданої рибки та починає нову групу. Загальна кількість утворених таким чином груп — це показник кількості груп у панелі статистики, що оновлюється приблизно шість разів на секунду.