Розділ 8. Фрактали
“Патологічні монстри!” — закричав переляканий математик.
Кожен із них осколок у моєму оці!
Я ненавиджу простір Пеано та криву Коха!
Я боюся тернарну множину Кантора!
Решітка Серпінського змушує мене плакати!
А за мільйон миль у стороні метелик змахнув крильцями.
Холодного листопадового дня народився чоловік, на ім’я Бенуа Мандельброт.
— Джонатан Коултон, текст із пісні “Множина Мандельброта”
Зал Чакрі Маха Прасат, розташований у Великому палаці у центрі Бангкока, Таїланд, і є архітектурним досягненням, відомим своїми складними деталями та величчю. Кожен рівень багатошарового даху повторює меншу чи більшу версію самого себе та представляє різні рівні гори Меру, центру буддійського всесвіту.
Колись у середній школі я вивчав курс геометрії. Можливо, ви теж пр ойшли такий курс, де дізналися про класичні форми в одному, двох і, можливо, навіть у трьох вимірах. Яка довжина кола? Площа прямокутника? Відстань між точкою і прямою лінією? Такий вид геометрії зазвичай називають евклідовою геометрією, на честь грецького математика Евкліда і, якщо подумати, це тема, яку я весь час розглядав у цій книзі. Щоразу, коли я використовував вектори для опису руху тіл у декартовому просторі, це була евклідова геометрія.
Однак для нас, програмістів природи, я хотів би поставити питання: чи справді наш світ можна описати за допомогою евклідової геометрії? Екран ноутбука, на який я зараз дивлюся, напевно виглядає як прямокутник. А слива, яку я їв сьогодні вранці, була кулястою. Але що, якби я подивився далі й подумав про дерева, що обсаджують вулицю, листя, що звисає з цих дерев, блискавку вчорашньої грози, цвітну капусту, яку я з’їв на вечерю, кровоносні судини в моєму тілі, гори та берегові лінії, що визначають ландшафт? Як показано на малюнку 8.1, більшість речей, які ви зустрінете у природі, виглядають зовсім не так, як ідеалізовані геометричні форми евклідової геометрі ї.
Якщо ви хочете розпочати створення програмних проєктів із патернами, які виходять за межі базових форм, таких як circle()
, square()
і line()
, настав час дізнатися про інший тип геометрії, геометрію природи: фрактали. У цьому розділі розглядаються концепції фракталів, а також методи програмування для моделювання фрактальної геометрії.
Що таке фрактал?
Термін фрактал (від латинського fractus, що означає “поламаний”) був введений математиком Бенуа Мандельбротом у 1975 році. У його основоположній праці “Фрактальна геометрія природи” він визначає фрактал як “грубу або фрагментовану геометричну форму, яку можна розділити на частини, кожна з яких є (принаймні приблизно) зменшеною копією цілого”.
Я проілюструю це визначення двома простими прикладами. Спочатку подумайте про розгалужену структуру дерева, як показано на малюнку 8.2. (У прикладі 8.6 я покажу вам, як написати код для малювання цього дерева.)
Зверніть увагу, що дерево має один стовбур із з’єднаними на кінці гілками. Кожна з цих гілок також має гілки на своєму кінці, а ці гілки також мають гілки й так далі. А що, якби ви зірвали одну гілку з цього дерева й уважніше оглянули її, як на малюнку 8.3?
Збільшена гілка є точною копією цілого, як описує Мандельброт. Однак не всі фрактали повинні бути ідеально самоподібними, як це дерево. Наприклад, подивіться на малюнок 8.4, на якому показано дві ілюстра ції узбережжя Гренландії (або Kalaallit Nunaat мовою корінного населення Kalaallisut).
Відсутність масштабу на цих ілюстраціях не випадкова. Я тут показую всю берегову лінію чи лише її невелику частину? Без посилання на масштаб про це неможливо дізнатися, тому що берегові лінії, подібно фракталам, виглядають практично однаково у будь-якому масштабі. (До речі, берегова лінія B показує приблизно в 3 рази збільшене зображення конкретної ділянки берегової лінії A. Я додав масштаб на малюнку 8.5.)