Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
7
Добавлен:
13.04.2015
Размер:
2.18 Кб
Скачать
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
//рекурсивная процедура рисования кривой Коха
procedure koh(x1,y1,x2,y2,x3,y3,k:integer; Cn:TCanvas);
var xxs,yys,xx1,yy1,xx2,yy2,xx3,yy3:integer;
begin
if k>0 then
begin
//средняя треть отрезка
xx1:=round((2*x1+x2)/3);
yy1:=round((2*y1+y2)/3);
xx2:=round((2*x2+x1)/3);
yy2:=round((2*y2+y1)/3);
//стираем ее
Cn.Pen.Color:=Form1.Color;
Cn.Pen.Width:=2;
Cn.MoveTo(xx1,yy1);
Cn.LineTo(xx2,yy2);
//координаты вершины угла
xxs:=round((x1+x2)/2);
yys:=round((y1+y2)/2);
xx3:=abs(round((4*xxs-x3)/3));
yy3:=abs(round((4*yys-y3)/3));
//рисуем его
Cn.Pen.Color:=clWhite;
Cn.Pen.Width:=1;
Cn.MoveTo(xx1,yy1);
Cn.LineTo(xx3,yy3);
Cn.LineTo(xx2,yy2);
//рекурсивно вызываем процедуру нужное число раз
koh(xx1,yy1,xx3,yy3,xx2,yy2,k-1,Cn);
koh(xx3,yy3,xx2,yy2,xx1,yy1,k-1,Cn);
koh(x1,y1,xx1,yy1,round((2*x1+x3)/3),round((2*y1+y3)/3),k-1,Cn);
koh(x2,y2,xx2,yy2,round((2*x2+x3)/3),round((2*y2+y3)/3),k-1,Cn);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var n,xc,yc,x1,y1,x2,y2,x3,y3,a:integer;
h:real;
begin
n:=strtoint(Edit1.Text);
xc:=ClientWidth div 2; //центр формы
yc:=ClientHeight div 2;
a:=xc-20; //длина стороны исходного треугольника
h:=a*sin(pi/3);//высота треугольника
x1:=xc-a div 2; //определим координаты исходного треугольника
y1:=yc+round(h/3);
x2:=xc;
y2:=yc-round(2*h/3);
x3:=xc+a div 2;
y3:=y1;
//нарисуем три кривых Коха на сторонах треугольника
with Canvas do
begin
Pen.Color:=clWhite;
Moveto(x1,y1);
LineTo(x2,y2);
LineTo(x3,y3);
LineTo(x1,y1);
koh(x1,y1,x2,y2,x3,y3,n,Canvas);
koh(x2,y2,x3,y3,x1,y1,n,Canvas);
koh(x3,y3,x1,y1,x2,y2,n,Canvas);
end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Color:=clBlue;
Form1.Caption:='Снежинка Коха';
end;

end.


Соседние файлы в папке ice
  • #
    13.04.20152.02 Кб7Project1.dof
  • #
    13.04.2015188 б6Project1.dpr
  • #
    13.04.2015876 б7Project1.res
  • #
    13.04.20156.16 Кб6Unit1.dcu
  • #
    13.04.2015633 б6Unit1.dfm
  • #
    13.04.20152.18 Кб7Unit1.pas
  • #
    13.04.2015633 б7Unit1.~dfm
  • #
    13.04.20152.18 Кб6Unit1.~pas