Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posobie КГ1.doc
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

6.4. Алгебраические фракталы

Рис. 85. Фрактал Мандельброта

Вторая большая группа фракталов – алгебраические. Свое название они получили, за то, что их строят, используя простые алгебраические формулы.

Получают их с помощью нелинейных процессов в n-мерных пространствах. Известно, что нелинейные динамические системы обладают несколькими устойчивыми состояниями. Состояние, в котором окажется динамическая система после некоторого числа итераций, зависит от начальных условий. Поэтому каждое устойчивое состояние (аттрактор) обладает некоторой областью начальных состояний, при которых система обязательно перейдет в рассматриваемые конечные состояния. Таким образом, фазовое пространство разбивается на области притяжения аттракторов.

Самыми известными из них являются множества Мандельброта и Жюлиа, Бассейны Ньютона и т.д.

Фрактал Мандельброта назван по имени французского математика польского происхождения Бенуа Мандельброта, известного исследователя фракталов.

Множество Мандельброта получают следующим образом: строится отображение z'=fc(z), где числа z и c - комплексные.

Алгоритм построения множества Мандельброта выглядит следующим образом:

  1. выбираем значение c

  2. z:=0 n:=0

  3. z:=f(z)

  4. inc(n)

Если не достигнуто максимальное значение итераций или значение z не превысило максимального значения, то повторять шаги 3 и 4.

Наиболее часто используется формула z = z2 + c, так как она наиболее проста в применении. Раскладывая уравнение на действительную и мнимую часть, получаем следующее:

Re: x2 - y2 + a Im: 2xy + b, приняв, что z = x + yi и c = a + bi.

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

Program M2;

Uses Graph, Crt;

Type

TComplex = Record

X : Real;

Y : Real;

End;

Const

iter = 50;

max = 16;

Var

z, t, c : TComplex;

x, y, n : Integer;

Cancel : Boolean;

gd, gm : Integer;

mx, my : Integer;

Begin

Cancel := False;

Randomize;

gd := Detect;

InitGraph(gd,gm,'e:\bp\bgi');

Mx := GetMaxX div 2;

My := GetMaxY div 2;

For y := -my to my do

For x := -mx to mx do Begin

n := 0;

C.X := X * 0.005;

C.Y := Y * 0.005;

z.X := 0;

z.Y := 0;

While (sqr(z.X) + sqr(z.Y) < max) and (n < iter) do Begin

t := z;

Z.X := sqr(t.X) - sqr(t.Y) + C.X;

Z.Y := 2 * t.X * t.Y+ C.Y;

Inc(n);

If keypressed then cancel := true;

End;

If n < iter then Begin

PutPixel(mx + x,my + y,16 - (n mod 16));

End;

If cancel then exit;

End;

Readkey;

CloseGraph;

end.

А теперь опишем программу словами. Для всех точек на комплексной плоскости в некотором интервале вычисляем достаточно большое количество раз z = z2 + c, каждый раз проверяя абсолютное значение z. Если это значение больше максимального, то рисуем точку с цветом, вычисляемым по количеству итераций, иначе рисуем точку черного цвета.

Черный цвет в середине показывает, что в этих точках функция стремится к нулю - это и есть множество Мандельброта. За пределами этого множества функция стремится к бесконечности. А самое интересное - это границы множества. Они то и являются фрактальными. Если рассмотреть увеличение, то можно увидеть самоподобие фигуры.

Увеличение фракталов. Для того чтобы увеличить данный объект, необходимо изменить коэффициенты в следующем куске кода:

C.X:=X*0.005;

C.Y:=Y*0.005;

Чем меньше число, тем больше увеличение и наоборот. Для того чтобы сместить множество, нужно прибавлять или вычитать числа в том же куске кода. Рассмотрим в общем случае:

C.X := X*m + dx;

C.Y := Y*m + dy;

З десь m задет увеличение, dx - смещение по горизонтали, а dy - смещение по вертикали. Например, положив, что m=0.0001, dx=-1.2, dy=-0.3, мы получим примерно то, что изображено на рисунке (рис. 86).

Рис. 86

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]