- •Менський Микола Іванович побудова фрактальних зображень
- •Основна частина Що таке фрактал ?
- •Множина Мандельброта
- •Фрактальні орбіти
- •Ітераційні функціональні системи (ifs)
- •Геометричні фрактали.
- •Побудова графічного зображення трикутника Серпінського
- •Побудова графічного зображення кривої Коха
- •Крива Гільберта
- •Крива Безьє
- •Технічне завдання Опис схеми програмного продукту «Фрактальний сад»
- •Вимоги до програмного забезпечення
- •Вимоги до апаратного забезпечення
- •Стадії та етапи розробки
- •Опис застосування
- •Висновок
- •Рекомендації
- •Список використаної літератури:
- •Додатки
- •Построение фракталов. Часть первая.
Побудова графічного зображення кривої Коха
Криву Коха можна побудувати за допомогою такої програми:
Program Koch;
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 := 1/2 * x + 1/(2*sqrt(3)) * y;
y := 1/(2*sqrt(3)) * t - 1/2 * y;
End
Else
Begin
x := 1/2 * x - 1/(2*sqrt(3)) * y +1/2;
y := -1/(2*sqrt(3)) * t - 1/2 * y + 1/(2*sqrt(3));
End;
PutPixel(mx + Round(rad * x), my - Round(rad * y), 2);
End;
End;
End.
Крива Гільберта
Крива Гільберта складається з чотирьох з’єднананих прямими елементів: a, b, c, d.
Кожен елемент , будує відповідна процедура. Потрібно звернути увагу на наступні особливості реалізації програми.
Процедура, яка малює елемент а, крім самої себе (для малювання кривої а
меншого порядку) викликає процедури d і b, текст яких в програмі знаходитьсяя після процедури а.
Щоб компілятор не вивів звістку про помилку, в текст програми записане об'явлення процедури з ключовим словом forward, яке означає,що це тільки об’ява, а реалізація знаходиться далі.Таким чином в процесі компіляції процедури а, компілятор "знає", що імена b і d означають процедури.
Кожен елемент строїть відповідна процедура:
procedure a1(i:integer; canvas: TCanvas); forward;
procedure b(i:integer; canvas: TCanvas); forward;
procedure c(i:integer; canvas: TCanvas); forward;
procedure d(i:integer; canvas: TCanvas); forward;
Побудова:
var
p: integer = 5; // порядок кривої
u: integer = 7; // довжина штриха
Елементи кривої
procedure a(i: integer; canvas: TCanvas); forward;
procedure b(i: integer; canvas: TCanvas); forward;
procedure с(i: integer; canvas: TCanvas); forward;
procedure d(i: integer; canvas: TCanvas); forward;
procedure a(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
d(i - l, canvas);
canvas.LineTo(canvas.PenPos.X + u, canvas.PenPos.Y);
a(i - l, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y + u);
a(i - l, canvas);
canvas.LineTo(canvas.PenPos.X - u, canvas.PenPos.Y);
с(i - 1, canvas);
end;
end;
procedure b(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
c(i - l, canvas);
canvas.LineTo(canvas.PenPos.X - u, canvas.PenPos.Y);
b(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y - u);
b(i - l, canvas);
canvas.LineTo(canvas.PenPos.X + u, canvas.PenPos.Y);
d(i - l, canvas);
end;
end;
procedure c(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
b(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y - u);
с(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X - u, canvas.PenPos.Y);
c(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y + u);
a(i - 1, canvas);
end;
end;
procedure d(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
a(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y + u);
d(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X + u, canvas.PenPos.Y);
d(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y - u);
b(i - 1, canvas);
end;
end;
Намалювати Криву Гільберта
procedure TForml.FormPaint(Sender: TObject);
begin
Form1.Canvas.MoveTo(u, u);
a(5, Form1.Canvas);
end;
end.