Фрактал – это графический объект состоящий из множества небольших объектов, каждый из которых выглядит как и сам большой объект.
Задание: нарисовать фрактальное дерево.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
//procedure fak(x, y, a, al, be, ga: integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
max:integer; //густота ветвей, самая густая=1, чем больше тем убывает
implementation
{$R *.dfm}
Procedure Draw(x, y : Integer; l, u : real);//рекурсивная процедура рисавания всего изображения
Procedure lineto1(x, y : Integer; l, u : real); //процедура рисования линии по заданным координатам
Begin
Form1.Canvas.MoveTo(x,y);
Form1.Canvas.LineTo(Round(x + l * cos(u)), Round(y - l * sin(u)));
End;
Begin
If l > max then
Begin
l := l * 0.7;
lineto1(x, y, l, u);
x := Round(x + l * cos(u));
y := Round(y - l * sin(u));
Draw(x, y, l, u + pi / strtoint(form1.edit2.text));{Угол поворота 1}
Draw(x, y, l, u - pi / strtoint(form1.edit3.text));{Угол поворота 2}
End;
end;
procedure TForm1.Button1Click(Sender: TObject);
var x1,y1,x2,y2:integer;
a:real;
begin
form1.Canvas.Brush.Color:=clwhite;
form1.Canvas.Rectangle(0, 0, Form1.Width, Form1.Height);
max:=StrToInt(Edit1.Text); //водим число 1,2,3....
x1:=Form1.ClientWidth div 2; //середина формы
y1:=Form1.ClientHeight - 100; //100 пикселей от нижнего края
Draw(x1, y1, Form1.ClientHeight div 3, pi/2)//размер рисунка 2/3 высоты формы, самый оптимальный
end; //угол между ветвями 90 град.
end.
Похожие записи
No user прокомментировали сообщение
Оставить комментарий