Пример кривой Гиль берта пятого порядка приведен на рис. 1.23.

Рис. 1.22. Кривые Гильберта

Рис. 1.23. Кривая Гильберта пятого порядка

var
р: integer = 5; // порядок кривой
u: integer =7; // длина штриха{ Кривая Гильберта состоит из четырех соединенных
прямыми элементов: а, Ъ, с и б.
Каждый элемент строит соответствующая процедура. }
procedure a(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;// Элементы кривой
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-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
a (i-1, 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
с (i-1, canvas);
canvas.LineTo(canvas.PenPos.X-u, canvas.PenPos.Y);
b(i-l, 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-l, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y-u);
с(i-1, canvas) ;
canvas.LineTo(canvas.PenPos.X-u, canvas.PenPos.Y);
с(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-l, canvas);
canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos.Y);
d(i-l, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
b(i-l, canvas);
end;
end;// обработка события OnPaint
procedure TForml.FormPaint(Sender: TObject);
begin
Forml.Canvas.MoveTo(u,u);
a(5,Forml.Canvas); // вычертить кривую Гильберта
and;