Archived
1
0
This repository has been archived on 2025-03-31. You can view files and clone it, but cannot push or open issues or pull requests.
pascal/UNITS/REKGRAPH.PAS
2001-11-30 12:14:44 +01:00

88 lines
1.9 KiB
Plaintext

unit RekGraph;
interface
uses Crt,Graph;
const skier_del:integer=0;
haken_del:integer=0;
quadrat_del:integer=0;
spirale_del:integer=0;
var globangle: integer;
procedure TLeft(var angle: integer);
procedure TRight(var angle: integer);
procedure Forwd(len: integer);
procedure Skier(len,edge:integer);
procedure Haken(len,angle: integer);
procedure Quadrat(len,angle: integer);
procedure Spirale(len,angle: integer);
implementation
{###########################################################################
#### Recursive functions following ####
###########################################################################}
procedure TLeft(var angle: integer);
begin
globangle := (globangle-angle) MOD 360;
end;
procedure TRight(var angle: integer);
begin
globangle := (globangle+angle) MOD 360;
end;
procedure Forwd(len: integer);
var tmp: real;
begin
tmp := globangle*pi/180;
LineRel(round(len*cos(tmp)),round(len*sin(tmp)));
end;
procedure Skier(len,edge:integer);
var n : byte;
w : integer;
begin
w:=360 DIV edge;
if len>30 then for n:=1 to edge do begin
Forwd(len);
TLeft(w);
Delay(skier_del);
Skier(len DIV 2,edge);
end;
end;
procedure Haken(len,angle: integer);
begin
if len>1 then begin
Haken(len-1, angle);
Forwd(len);
TLeft(angle);
Delay(haken_del);
end;
end;
procedure Quadrat(len,angle: integer);
var side:integer;
begin
if len>1 then begin
for side:=1 to 4 do begin
Forwd(len);
TLeft(angle);
end;
Delay(quadrat_del);
Quadrat((len*3) div 4,angle);
end;
end;
procedure Spirale(len,angle: integer);
begin
Forwd(len div 2);
TRight(angle);
Delay(spirale_del);
if len<80 then Spirale(len+1,angle);
end;
begin
WriteLn('þ Loading Unit: RekGraph - Markus Birth <mbirth@webwriters.de>');
end.