logo search
Лекция Фрактальная графика

5.1. Множество Мандельброта.

Чтобы проиллюстрировать алгебраические фракталы обратимся к классике - множеству Мандельброта.

Для его построения нам необходимы комплексные числа. Комплексное число - это число, состоящее из двух частей - действительной и мнимой, и обозначается оно a+bi. Действительная часть a это обычное число в нашем представлении, а вот мнимая часть bi интересней. i - называют мнимой единицей. Почему мнимой? А потому, что если мы возведем i в квадрат, то получим -1.

Рассмотрим функцию , . Множество Мандельброта определяется как множество всех , для которых орбита точки при отображении ограничена.

Множество всех точек , для которых итерации остаются ограниченными при , называется множеством Мандельброта

Приняв, что и , раскладывая на действительную и мнимую часть, получаем:

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

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.

Также можно изменить вид фрактала, если контроль значения вести другим образом. Наиболее употребляемый способ уже рассмотрен — достигает определённого максимального числа. Другими способами являются:

Есть и другие способы.

Изменяя значение n в общей формуле, можно получать различные варианты изображения.