IFS - алгоритм построения фракталов



IFS (Iterated Function System – итеративные функциональные системы) фракталы несложны в реализации и позволяют получить изображения таких природных объектов как растения. Схема их генерации следующая: определим N матриц преобразований и выберем некую стартовую точку, например, с координатами (0,0). В зависимости от масштаба и точности изображения установим максимальное число итераций, например 10000. Далее, на каждой итерации случайным образом применяем к нашей точке одно из преобразований, например, с помощью матрицы афинских коэффициентов (1) и выводим ее на экран.

                                                     (1)

Какая бы ни была стартовая точка, с некоторой итерации она начнет блуждать только по изображению фрактала. Самый простой способ раскраски фрактала - для каждого преобразования сопоставить отдельный цвет.

Треугольник Серпинского в виде (рис. 2б) также легко построить с помощью IFS-преобразований (1). Программа для его построения этим методом на языке Pascal имеет вид:

 

program FracSierp;

Uses CRT, Graph;

Var gd,gm : Integer;

t, x, y, p : Real;

k : LongInt;

mx, my, rad : Integer;

Procedure draw;

const iter = 50000;

Begin

mx := 320; my := 479; rad := my;

Randomize;

x := 0.0; y := 0.0;

For k := 1 To iter Do

Begin

p := Random;

t := x;

If p < = 1/3 Then

Begin

x:=0.50*x+0.0*y+0.0;

y:=0.00*t+0.50*y+0.5;

End

Else

If p < = 2/3 Then

Begin

x:= 0.5*x+0.0*y-0.25;

y:=0.0*t+0.5*y+0.0;

End

Else

Begin

x:=0.50*x+0.0*y+0.25;

y:=0.0*t+0.5*y+0.0;

End;

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

End;

End;

Begin

gd := Detect;

InitGraph(gd,gm,'');

draw;

ReadKey;

CloseGraph;

End.

 

Еще один способ построения треугольника Серпинского:

 

Program Sierp10;

Uses CRT, Graph;

Var gd, gm: Integer;

l, x, y: Real;

Begin

gd:=Detect;

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

x:=0; y:=0;

Randomize;

While not Keypressed Do

Begin

l:=2/3*pi*random(3); x:=x/2+cos(l); y:=y/2+sin(l);

PutPixel(320 + Round(x*130), 240 + Round(y*130), 14);

End;

Readkey;

CloseGraph;

End.

 

Наконец, фрактал Серпинского можно построить, используя треугольник Паскаля по модулю 2 в виде, приведенном на рис. 2в. Программа, реализующая эту процедуру, имеет вид:

 

{$N+}

Program PascalMod2;

Uses Crt, Graph;

Const max=31;

Var n, i: Integer;

gd,gm: Integer;

Function Fact(m: Integer): Real; {m!}

Var j: Integer;

s: Real;

Begin

s:=1;

For j:=1 to m do s:=s+j;

Fact:=s;

End;

Function BinomCoeff(m, k: Integer): Integer;

Begin

BinomCoeff:=Round(Fact(m)/Fact(k)/Fact(m-k));

End;

Begin

gd:=Detect;

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

SetColor(15);

For n:=0 to max do

For i:=0 to n do

If BinomCoeff(n,i) mod 2 = 0

Then OutTextXY(n+8, i+8,' ')

Else OutTextXY(n+8, i+8,'+');

ReadKey;

CloseGraph;

End.

Варианты задания

 

1. Ковер Серпинского – квадрат (рис. 2а).

2. Ковер Серпинского – правильный треугольник (рис. 2б).

3. Ковер Серпинского – равнобедренный прямоугольный треугольник (рис. 2в).

 

Контрольные вопросы

 

1. Что вы понимаете под фрактальным кластером?

2. Каковы основные модели формирования фрактальных кластеров?

3. В чем принципиальная разница и сходство фракталов Мандельброта и Жулиа?

4. Поясните последовательность действий, реализующих треугольный ковер Серпинского.

5. Поясните последовательность действий, реализующих квадратный ковер Серпинского.

4. Какие алгоритмы называются рекурсивными?

 

 

Основные источники

1. Ибрагимов И.М. Основы компьютерного моделирования наносистем. Учебное пособие / И.М. Ибрагимов, А.Н. Ковшов, Ю.Ф. Назаров. - М. : Лань, 2010. - 384 с.

2. Архангельский А.Я. Программирование в Delphi 7. М.: ООО «Бином-Пресс», 2003 г. — 1152 с.

 

 

Дополнительная литература

 

1. Кроновер Р.М. Фракталы и хаос в динамических системах. Основы теории. М.: Постмаркет, 2000. – 352 с.

2. Федер Е. Фракталы: Пер. с англ. – М.: Мир, 1991. – 254 с.

3. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. – В 2 т.– 1992 (http://www.twirpx.com)

 

 


Дата добавления: 2018-10-27; просмотров: 330; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!