Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
22780_ПОБУДОВА ФРАКТАЛЬНИХ ЗОБРАЖЕНЬ.doc
Скачиваний:
57
Добавлен:
14.02.2016
Размер:
2.91 Mб
Скачать

Побудова графічного зображення трикутника Серпінського

Побудова графічного зображення трикутника Серпінського з використанням методу L-системи

Const

iter = 5;

Procedure tr(x1, y1, x2, y2, x3, y3: Real);

Begin

Form1.PaintBox1.Visible:=False;

Form1.Image1.Visible:=True;

Form1.Image2.Visible:=False;

Form1.Image4.Visible:=False;

Form1.Image3.Visible:=False;

Form1.Image1.Canvas.LineTo(round(x1), round(y1));

Form1.Image1.Canvas.LineTo(round(x2), round(y2));

Form1.Image1.Canvas.LineTo(round(x2), round(y2));

Form1.Image1.Canvas.LineTo(round(x3), round(y3));

Form1.Image1.Canvas.LineTo(round(x3), round(y3));

Form1.Image1.Canvas.LineTo(round(x1), round(y1));

End;

Procedure draw(x1, y1, x2, y2, x3, y3: Real; n: Integer);

Var

x1n, y1n, x2n, y2n, x3n, y3n : Real;

Begin

If n > 0 then Begin

x1n := (x1 + x2) / 2;

y1n := (y1 + y2) / 2;

x2n := (x2 + x3) / 2;

y2n := (y2 + y3) / 2;

x3n := (x3 + x1) / 2;

y3n := (y3 + y1) / 2;

tr(x1n, y1n, x2n, y2n, x3n, y3n);

draw(x1, y1, x1n, y1n, x3n, y3n, n - 1);

draw(x2, y2, x1n, y1n, x2n, y2n, n - 1);

draw(x3, y3, x2n, y2n, x3n, y3n, n - 1);

Form1.Image1.Canvas.LineTo(round(x1), round(y1));

Form1.Image1.Canvas.LineTo(round(x2), round(y2));

Form1.Image1.Canvas.LineTo(round(x2), round(y2));

Form1.Image1.Canvas.LineTo(round(x3), round(y3));

Form1.Image1.Canvas.LineTo(round(x3), round(y3));

Form1.Image1.Canvas.LineTo(round(x1), round(y1));;

End;

End;

procedure TForm1.BitBtn6Click(Sender: TObject);

begin

tr(265,10,545,470,5,470);

draw(265,10,545,470,5,470,10);

end;

IFS- алгоритм

Трикутник Серпінського легко можна побудувати з допомогою трьох IFS-перетворень. Програма для побудови трикутника Серпінського цим методом на мові Delphi має вигляд:

procedure TForm1.BitBtn1Click(Sender: TObject);

const iter = 50000;

Var

t, x, y, p : Real;

my, rad : Integer;

Begin

my := 548;

rad := my;

Randomize;

x := 0.0;

y := 0.0;

repeat

ProgressBar1.Position:=ProgressBar1.Position+2;

p := Random;

t := x;

If p <= 1/3 Then Begin

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

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

End

Else

If p <= 2/3 Then Begin

x := 0.50 * x + 0.00 * y - 0.25;

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

End

Else Begin

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

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

End;

Image2.Canvas.Ellipse(275 + Round(rad * x), 549 - Round(rad * y), 276 + Round(rad * x), 550 - Round(rad * y));

until Form1.ProgressBar1.Position=150000;

end;

Ще один спосіб побудови трикутника Серпінського- використання нелінійних перетворень.

procedure TForm1.BitBtn8Click(Sender: TObject);

var

l, x, y: Real;

Begin

Randomize;

Repeat

Form1.ProgressBar1.Position:=ProgressBar1.Position+2;

l:=2/3*pi*random(3);

x:=x/2+cos(l);

y:=y/2+sin(l);

Image4.Canvas.Ellipse(220 + Round(x*130), 260 - Round(y*130), 221 + Round(X*130), 261- Round(y*130));

until ProgressBar1.Position=xc;{60000}

End;

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