КГ_3глава (1024106), страница 6
Текст из файла (страница 6)
брота можно выполнять в диапазон х - (от -2.2 до 1), у = (от -1.2 до 1.2). Для того чтобы получить изображение в растре, необходимо пересчитывать координаты этот диапазона в пиксели ые. В главе 6 мы рас-; смотрим соответствующий пример программы, генерирующей изображения этого фрактала.
Фрактал Джулия внешне совсем не похож на фрактал Мандельброта, однако он определяется итерационным циклом, почти полностью тождественным с циклом генерации Ман-цельброта. Формула итераций для фрактала Цжулия такая:
Tie с— комплексная константа. Условием завершения итераций является \ z к\> 2 — так же, как для фрактала Мандельброта.
la. рис. 3.30 приведено несколько изображений фрактала Джулия для с — 0.36 + / 0.36, =25'6. На верхнем образце картинка построена в границах х = (от —1 до 1), у — (от 1.2 до 1.2). На
втором и третьем изображе-Рис. 3.30. Фрактал Джулия ниях рис. 3.30 показаны увеличенные фрагменты фрактала. Как видим, фрактал самоподобный — при любом увеличении отдельные части напоминают формы целого. Самоподобие считается важным свойством фракталов. Это отличает их от других типов объектов сложной формы.
Рассмотрим следующий пример фрактала — фрактал Ньютон. Для него итерационная формула имеет такой вид:
где z — также комплексные числа, причем z0 - х + iy соответствует координатам точки изображения.
Условием прекращения цикла итераций для фрактала Ньютон есть приближение значений \z4— 1| к нулю. Например, изображение на рис. 3.31 было получено для \z4 — 1|2> 0.001, границы расчетах = (от—1 до 1),у- (от—1 до 1).
Рис. 3.31. Фрактал Ньютон Рис. 3.32. Геометрические итерации
для кривой Кох
Рассмотрим еще одну разновидность фракталов. Такие фракталы названы геометрическими, поскольку их форма может быть описана как последовательность простых геометрических операций. Например, кривая Кох становится фракталом в результате бесконечного количества итераций, в ходе которых выполняется деление каждого отрезка прямой на три части. На рис. 3.32 показаны три итерации— постепенно линия становится похожей на снежинку.
Следующую группу составляют фракталы, которые генерируются согласно методу "систем итеративных функций" — IFS (Iterated Functions Systems). Этот метод может быть описан, как последовательный итеративный расчет координат новых точек в пространстве:
где Fx и Fy— функции преобразования координат, например, аффинного преобразования. Эти функции и определяют форму фрактала. В случае аффинного преобразования необходимо найти соответствующие числовые значения коэффициентов.
Давайте попробуем создать фрактал, который бы выглядел как растение. Вообразим себе ствол, на котором много веточек. На каждой веточке много меньших веточек и так далее. Самые малые ветки можно считать листвой или колючками. Все элементы будем рисовать отрезками прямой. Каждый отрезок будет задаваться двумя конечными точками.
Для начала итераций необходимо задать стартовые координаты линии. Это будут точки 1, 2. На каждом шаге итераций будем рассчитывать координаты других точек.
J
Сначала находим точку 3. Это повернутая и угол а точка 2, центр поворота — в точке 1 (рис. 3.33)
Если α = 0, то ствол и все ветви прямые. Потом находим точку 4. От нее будут распространяться ветви; Пусть соотношение длин отрезков 1 -4 и 1 -3 равно % причем 0<k<1. Тогда для вычисления коордишп точки
4 можно воспользоваться следующими фор
Рис. 3.33. Опорные мулами: точки элементов фрактала
Теперь зададим длину и угол наклона ветвей, которые выходят из точки 4. Сначала найдем координаты точки 5. Введем еще один параметр— к1, который будет определять соотношение длин отрезков 4-5 и 4-3, причем также 0<k1<1. Координаты точки 5 равны:
Точки 6 и 7 — это точка 5, повернутая относительно точки 4 на углы β и -β соответственно:
Кроме расчета опорных точек на каждом шаге будем рисовать один отрезок 1-4. В зависимости от номера итераций можно изменять цвет отрезка. Также можно устанавливать его толщину, например, пропорционально длине.
Таким образом, фрактал мы задали как последовательность аффинных преобразований координат точек. Величины α, β, к, к1 — это параметры, которые описывают вид фрактала в целом. Они представляют собой константы на протяжении всего итеративного процесса. Это дает возможность в итерациях использовать только операции сложения, вычитания и умножения, если вы-
числить значения sin(), cos(), (1— k)и(1— k1) только один раз перед началом итераций как коэффициенты-константы.
Дадим запись алгоритма в виде рекурсивной процедуры шаг ().
Для того чтобы нарисовать фрактал, необходимо вызывать процедуру шаг, установив соответствующие значения ее аргументов: шаг(x 1, y1, x2, у2, 0) .Обратите внимание на один из аргументов этой процедуры— пшп, который в начале работы равен 0. В теле процедуры есть три рекурсивных вызова с различными значениями этого аргумента:
Значение num показывает степень детализации расчета дерева. Один цикл итераций содержит много шагов, соответствующих одному значению вели-
чины num. Числовое значение num можно использовать для прекращения м ративного процесса, а также для определения текущего цвета элемент* "растения".
Завершение циклов итераций в нашем алгоритме происходит тогда, когда длина ветви становится меньше некоторой величины lmin, например, lmin =1 Этот фрактал при α = 2°, /3 = 86°, к = 0.14, к1 = 0.3 похож на папоротник (рис. 3.34).
Рис. 3.34. Вид фрактала для разного количества циклов итераций
Метод IFS применяется не только для создания изображений. Его использовали Барнсли и Слоан для эффективного сжатия графических изображений при записи в файлы. Основная идея такая: поскольку фракталы могут представлять очень сложные изображения с помощью простых итераций, то описание этих итераций требует значительно меньшего объема информации, чем! соответствующие растровые изображения. Для кодирования изображений' необходимо решать обратную задачу — для изображения (или его фрагмента) подобрать соответствующие коэффициенты аффинного преобразования. Этот метод используется для записи цветных фотографий в файлы со сжатием в десятки и сотни раз без заметного ухудшения изображения. Формат таких графических файлов назван FIF (Fractal Image Format) и запатентован фирмой Iterated Systems [36].