Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция Фрактальная графика.doc
Скачиваний:
34
Добавлен:
04.12.2018
Размер:
840.19 Кб
Скачать

3. Системы итерируемых функций.

Определение. Линейное преобразование вместе с последующим преобразованием сдвига будем называть аффинным преобразованием.

Аффинное преобразование в пространстве можно представить в матричной форме:

Важное свойство аффинного преобразования заключается в том, что аффинное преобразование отрезок переводит в отрезок.

Аффинное преобразование плоскости однозначно определяется тройкой не лежащих на одной прямой точек и их образами. В самом деле, пусть некоторое АП отображает точки , , в точки , и .

Тогда имеем:

Если

то получаем следующую систему линейных уравнений:

Или, переписывая, получаем:

Решая эту систему, находим матричное представление аффинного преобразования.

Системе итерируемых функций в пространстве :

соответствует следующий формат представления:

Fractal {

a1 b1 c1 d1 e1 f1 p1

a2 b2 c2 d2 e2 f2 p2

..............

an bn cn dn en fn pn

}

где числа есть вероятности выбора соответствующих преобразований в рандомизированном алгоритме.

Для построения фракталов, задаваемых таким способом требуется в программе описать процедуру изменения координат по задаваемому коэффициентами СИФ закону.

Пример. Написать программу построения фрактала Лист, задаваемого следующим набором СИФ:

Leaf_3 {

0.60 -0.6 0.6 0.60 0.00 0.0 0.5

0.53 0.0 0.0 0.53 0.47 0.0 0.5

}

Рис. Фрактал Лист.

program Leaf_3;

uses CRT, Graph;

var

gd,gm : Integer;

const

iter = 50000;

procedure Draw;

var

t, x, y, p : Real;

k : LongInt;

mx, my, rad : Integer;

begin

mx := 10;

my := 250;

rad :=600;

Randomize;

x := 0.0;

y := 0.0;

for k := 1 To iter do

begin

p := Random;

t := x;

if p <= 1/2 then

begin

x := 0.6 * x -0.6* y;

y := 0.6 * t +0.6* y;

end

else

begin

x := 0.53 * x +0.0 * y +0.47;

y := 0.0* t +0.5 * y;

end;

PutPixel(mx + Round(rad * x), my - Round(rad * y), 2);

end;

end;

begin

gd := Detect;

InitGraph(gd,gm,'d:\bp\bin');

Draw;

ReadKey;

CloseGraph;

end.

4. Геометрические фракталы.

4.1. Снежинка Коха

Строится она на основе равностороннего треугольника. Каждая линия которого ___ заменяется на 4 линии каждая длинной в 1/3 исходной _/\_. Таким образом, с каждой итерацией длинна кривой увеличивается на треть. И если мы сделаем бесконечное число итераций - получим фрактал - снежинку Коха бесконечной длинны. Получается, что наша бесконечная кривая покрывает ограниченную площадь. Попробуйте сделать то же самое методами и фигурами из евклидовой геометрии. Для построения геометрических фракталов хорошо приспособлены так называемые L-Systems. Суть этих систем состоит в том, что имеется определенных набор символов системы, каждый из которых обозначает определенное действие и набор правил преобразования символов. Этот способ построения изображений будет рассмотрен более подробно далее.

Построение кривой Коха

Процесс построения кривой Коха выглядит следующим образом: берём единичный отрезок, разделяем на три равные части и заменяем средний интервал равносторонним треугольником без этого сегмента. В результате образуется ломанная, состоящая из четырёх звеньев длины . На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев. Предельная кривая и есть кривой Коха.

Кривую Коха можно также построить с помощью двух СИФ-преобразований:

В формате FRACTINT эти преобразования запишутся следующим образом:

Curve_Koch {

0.5 0.288675 0.288675 -0.5 0 0 0.5

0.5 -0.288675 -0.288675 -0.5 0.5 0.288675 0.5

}

Кривая Коха имеет бесконечную длину. Кроме того, кривая Кох состоит из четырёх равных частей, каждая из которых подобна всей кривой с коэффициентом подобия 1/3. Отсюда следует, что каждая часть кривой имеет бесконечную длину. Также эта кривая нигде себя не пересекает, так как достраиваемые треугольники каждый раз достаточно малы и никогда не "сталкиваются" друг с другом.