тера-Хейтуея. Його кодом (стисненим описом) є набір коефіцієнтів двох афінних перетворень.
Рис 13. Дракон Хартера-Хейтуея, побудований за допомогою IFS в прямокутнику 640x350
Аналогічно можна побудувати IFS для кривої Кох. Неважко бачити, що ця крива має чотири частини, подібні цілої кривої ({пункт «геометричні фрактали»} рис.2). Для знаходження IFS знову розташуємо перше покоління цього фрактала на сітці координат дисплея 640 x 350 (Рис.14).
Рис 14. Заготівля для побудови IFS кривої Кох
Для її побудови потрібно набір афінних перетворень, що складається з чотирьох перетворень:
X =0.333 * X + 13.333 =0.333 * Y + 200 =0.333 * X + 413.333 =0.333 * Y + 200 =0.167 * X + 0.289 * Y + 130 =- 0.289 * X + 0.167 * Y + 256 =0.167 * X - 0.289 * Y + 403 =0.289 * X + 0.167 * Y + 71
Результат застосування цього аффинного колажу після десятого ітерації можна побачити на рис.15.
Рис 15. Крива Кох, побудована за допомогою IFS в прямокутнику 640x350
Використання IFS для стиснення звичайних зображень (наприклад, фотографій) засновано на виявленні локального самоподібності, на відміну від фракталів, де спостерігається глобальне самоподоба і знаходження IFS не надто складно (ми самі в цьому переконалися). За алгоритмом Барнслі відбувається виділення в зображенні пар областей, менша з яких подібна більшою, і збереження декількох коефіцієнтів, що кодують перетворення, що переводить більшу область в меншу. Потрібно, щоб безліч менших областей покривало все зображення. При цьому у файл, що кодує зображення будуть записані не тільки коефіцієнти, що характеризують знайдені перетворення, але й місце розташування і лінійні розміри великих областей, які разом з коефіцієнтами будуть описувати локальне самоподоба кодованого зображення. Відновлюючий алгоритм, в цьому випадку, повинен застосовувати кожне перетворення не до всієї безлічі точок, одержані на попередньому кроці алгоритму, а до деякого їх підмножині, приналежному області, що відповідає вживаному перетворенню.
системи
Любителям фракталів і математичних картинок відомі фантастичні зображення рослин, отримані за допомогою програм. Це так звані L-системи. В основі їх побудови лежать два принципи. Перший - це так звана «черепашача графіка» (оператор draw) патріарха GWBASIC і його дітей Turbo Basic і QBasic, коли рух малюється покроково в збільшеннях щодо поточної точки. Або моделюється дану поведінку, задаючи рух в збільшеннях координат. Другий принцип - родзинка методу: кожне одиничне рух замінюється на весь малюнок. Наприклад, намалюємо вилку-рогатульку. На наступному кроці роботи програми кожна з трьох паличок вилки замінюється такий же виделкою, перетворюючи вилку в гілку з сучками, після наступного кроку отримаємо кошлатий кущ, потім пухнасте дерево, красиве, фрактальное. Міняючи вид початкової картинки можна отримувати самі різні зображення від парасольок кропу до колючого перекотиполе або пучка водоростей.
Суть L-кодування зводиться до наступного. Уявімо собі якесь віртуальне програмований пристрій, що складається з пера, керуючого ним механізму і аркуша паперу. Керуючий пером механізм здатний виконувати кілька команд. А саме: він може опустити перо на папір і викреслити прямий відрізок заданої довжини в напрямі поточної орієнтації пера (команда F). Він може змінити орієнтацію пера по відношенню до поточної на якийсь заданий відносний кут за годинниковою або проти годинникової стрілки (команди + і -). Він може також запам'ятовувати (заносити в стек) свій поточний стан (команда [) і згадувати (витягати з стека) раніше запомненное стан (команда]). Під станом в даному випадку розуміється трійка чисел (x, y, a), де x і y - це координати пера і а - це кут, що визначає напрямок орієнтації пера. Таким чином, задавши якесь початкова напрям а0, визначивши відносний кут повороту в 900 і задавши довжину відрізка, за допомогою послідовності команд F + F + F + F ми можемо намалювати квадрат. Визначивши відносний кут повороту в 600, за допомогою послідовності команд F ++ F ++ F можна намалювати рівносторонній трикутник.
Припустимо також, що в програми для нашого віртуального пристрою, крім п'яти перерахованих команд, можна включати будь-які інші символи, які керуючий механізм буде просто ігнорувати. Тобто якщо ми введемо програму F + BF + CCF + CF, то пристрій все одно намалює квадрат. Тепер подумки оснастимо наш пристрій приставкою, яка перед тим, як передати введену програму на керуючий механізм, може задане число раз переглядати її, і при кожному черговому перегляді замінювати будь-які символи послідовності по попередньо вказаними правилами. Вихідну програмну послідовність символів тепер будемо називати аксіомою. Наприклад, введемо аксіому FB +, і визначимо правило B lt; F + FB...