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

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.