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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!