# Dragon.p

Below is the text of a Pascal program dragon.p which writes a postscript file dragon.ps for an approximation to the dragon's tooth fractal.

## The Pascal program dragon.p

```{ Draw dragon's tooth.  Output is raw postscript file. }

program DragonTooth;

const pi = 3.14159265;

var
outfile: text;
L: integer;

procedure tooth (x, y, r, theta: real; L: integer);
begin
if L = 0 then
begin
writeln(outfile, x : 1 : 6, ' ', y : 1 : 6, ' moveto');
writeln(outfile, r * cos(theta) : 1 : 6, ' ', r * sin(theta) : 1 : 6, ' rlineto');
writeln(outfile, 'stroke');
writeln(outfile);

end
else
begin
r := r / 3;
L := L - 1;

tooth(x, y, r, theta, L);

x := x + r * cos(theta);
y := y + r * sin(theta);
theta := theta + pi / 3;
tooth(x, y, r, theta, L);

x := x + r * cos(theta);
y := y + r * sin(theta);
theta := theta - 2 * pi / 3;
tooth(x, y, r, theta, L);

x := x + r * cos(theta);
y := y + r * sin(theta);
theta := theta + pi / 3;
tooth(x, y, r, theta, L);
end;
end;

begin
write('  Enter level of recursion > ');
writeln('  Postscript output will be in dragon.ps');

rewrite(outfile, 'dragon.ps');
writeln(outfile, '% Dragons tooth ');
writeln(outfile);
writeln(outfile, '/inch {72 mul} def');
writeln(outfile, '/k 5 inch def');
writeln(outfile, '4.25 inch k 2 div sub 5.5 inch k 4 div sub translate');
writeln(outfile, 'k  k  scale');
writeln(outfile, '0.1 k div setlinewidth');
writeln(outfile);

tooth(0, 0, 1, 0, L);

writeln(outfile);
writeln(outfile, 'showpage');
close(outfile);
end.
```

## The output file dragon.ps

``` % Dragons tooth

/inch {72 mul} def
/k 5 inch def
4.25 inch k 2 div sub 5.5 inch k 4 div sub translate
k  k  scale
0.1 k div setlinewidth

0.000000 0.000000 moveto
0.037037 0.000000 rlineto
stroke

0.037037 0.000000 moveto
0.018519 0.032075 rlineto
stroke

0.055556 0.032075 moveto
0.018519 -0.032075 rlineto
stroke

0.074074 0.000000 moveto
0.037037 0.000000 rlineto
stroke

0.111111 0.000000 moveto
0.018519 0.032075 rlineto
stroke

0.129630 0.032075 moveto
-0.018519 0.032075 rlineto
stroke

0.111111 0.064150 moveto
0.037037 0.000000 rlineto
stroke

0.148148 0.064150 moveto
0.018519 0.032075 rlineto
stroke

0.166667 0.096225 moveto
0.018519 -0.032075 rlineto
stroke

0.185185 0.064150 moveto
0.037037 0.000000 rlineto
stroke

0.222222 0.064150 moveto
-0.018519 -0.032075 rlineto
stroke

0.203704 0.032075 moveto
0.018519 -0.032075 rlineto
stroke

0.222222 0.000000 moveto
0.037037 0.000000 rlineto
stroke

0.259259 0.000000 moveto
0.018519 0.032075 rlineto
stroke

0.277778 0.032075 moveto
0.018519 -0.032075 rlineto
stroke

0.296296 0.000000 moveto
0.037037 0.000000 rlineto
stroke

0.333333 0.000000 moveto
0.018519 0.032075 rlineto
stroke

0.351852 0.032075 moveto
-0.018519 0.032075 rlineto
stroke

0.333333 0.064150 moveto
0.037037 0.000000 rlineto
stroke

0.370370 0.064150 moveto
0.018519 0.032075 rlineto
stroke

0.388889 0.096225 moveto
-0.018519 0.032075 rlineto
stroke

0.370370 0.128300 moveto
-0.037037 0.000000 rlineto
stroke

0.333333 0.128300 moveto
0.018519 0.032075 rlineto
stroke

0.351852 0.160375 moveto
-0.018519 0.032075 rlineto
stroke

0.333333 0.192450 moveto
0.037037 0.000000 rlineto
stroke

0.370370 0.192450 moveto
0.018519 0.032075 rlineto
stroke

0.388889 0.224525 moveto
0.018519 -0.032075 rlineto
stroke

0.407407 0.192450 moveto
0.037037 0.000000 rlineto
stroke

0.444444 0.192450 moveto
0.018519 0.032075 rlineto
stroke

0.462963 0.224525 moveto
-0.018519 0.032075 rlineto
stroke

0.444444 0.256600 moveto
0.037037 0.000000 rlineto
stroke

0.481481 0.256600 moveto
0.018519 0.032075 rlineto
stroke

0.500000 0.288675 moveto
0.018519 -0.032075 rlineto
stroke

0.518519 0.256600 moveto
0.037037 0.000000 rlineto
stroke

0.555556 0.256600 moveto
-0.018519 -0.032075 rlineto
stroke

0.537037 0.224525 moveto
0.018519 -0.032075 rlineto
stroke

0.555556 0.192450 moveto
0.037037 0.000000 rlineto
stroke

0.592593 0.192450 moveto
0.018519 0.032075 rlineto
stroke

0.611111 0.224525 moveto
0.018519 -0.032075 rlineto
stroke

0.629630 0.192450 moveto
0.037037 0.000000 rlineto
stroke

0.666667 0.192450 moveto
-0.018519 -0.032075 rlineto
stroke

0.648148 0.160375 moveto
0.018519 -0.032075 rlineto
stroke

0.666667 0.128300 moveto
-0.037037 -0.000000 rlineto
stroke

0.629630 0.128300 moveto
-0.018519 -0.032075 rlineto
stroke

0.611111 0.096225 moveto
0.018519 -0.032075 rlineto
stroke

0.629630 0.064150 moveto
0.037037 0.000000 rlineto
stroke

0.666667 0.064150 moveto
-0.018519 -0.032075 rlineto
stroke

0.648148 0.032075 moveto
0.018519 -0.032075 rlineto
stroke

0.666667 0.000000 moveto
0.037037 0.000000 rlineto
stroke

0.703704 0.000000 moveto
0.018519 0.032075 rlineto
stroke

0.722222 0.032075 moveto
0.018519 -0.032075 rlineto
stroke

0.740741 0.000000 moveto
0.037037 0.000000 rlineto
stroke

0.777778 0.000000 moveto
0.018519 0.032075 rlineto
stroke

0.796296 0.032075 moveto
-0.018519 0.032075 rlineto
stroke

0.777778 0.064150 moveto
0.037037 0.000000 rlineto
stroke

0.814815 0.064150 moveto
0.018519 0.032075 rlineto
stroke

0.833333 0.096225 moveto
0.018519 -0.032075 rlineto
stroke

0.851852 0.064150 moveto
0.037037 0.000000 rlineto
stroke

0.888889 0.064150 moveto
-0.018519 -0.032075 rlineto
stroke

0.870370 0.032075 moveto
0.018519 -0.032075 rlineto
stroke

0.888889 0.000000 moveto
0.037037 0.000000 rlineto
stroke

0.925926 0.000000 moveto
0.018519 0.032075 rlineto
stroke

0.944444 0.032075 moveto
0.018519 -0.032075 rlineto
stroke

0.962963 0.000000 moveto
0.037037 0.000000 rlineto
stroke

showpage
```