|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Alexey Danov 2:5020/400 26 Sep 2001 13:25:17 To : Yurij Zabelyshynskij Subject : Re: 2D cash --------------------------------------------------------------------------------
вот пример кривой Гильберта на Delphi:
procedure TForm1.FormPaint(Sender: TObject);
const
SquareSize = 512;
var
i,x0,y0,u,Px,Py: integer;
procedure Line(N,dS:integer);
var dx,dy,i:integer;
begin
dx := 0; dy := 0;
case N of
0: dy := -dS;
2: dx := dS;
4: dy := dS;
6: dx := -dS;
end;
Canvas.MoveTo(Px,Py);
inc(Px,dX); inc(Py,dY);
Canvas.LineTo(Px,Py);
// тормоз, чтоб видно было КАК рисуется ;-)
for i := 0 to 1000000 do begin end;
end;
procedure B(i: integer);forward;
procedure C(i: integer);forward;
procedure D(i: integer);forward;
procedure A(i: integer);
begin
if i > 0 then begin
D(i-1); line(4,u); A(i-1); line(6,u);
A(i-1); line(0,u); B(i-1)
end;
end;
procedure B(i: integer);
begin
if i > 0 then begin
C(i-1); line(2,u); B(i-1); line(0,u);
B(i-1); line(6,u); A(i-1)
end;
end;
procedure C(i: integer);
begin
if i > 0 then begin
B(i-1); line(0,u); C(i-1); line(2,u);
C(i-1); line(4,u); D(i-1)
end;
end;
procedure D(i: integer);
begin
if i > 0 then begin
A(i-1); line(6,u); D(i-1); line(4,u);
D(i-1); line(2,u); C(i-1)
end;
end;
begin
x0 := ClientWidth - (ClientWidth - ClientHeight) div 2; y0 := 10;
u := SquareSize; i := 6;
u := u shr i;
x0 := x0 + (u div 2);
y0 := y0 + (u div 2);
Px := x0; Py := y0;
A(i);
end;
--- ifmail v.2.15dev5
* Origin: Internet-Arkhangelsk Company (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/44187164309c.html, оценка из 5, голосов 10
|