Páfrány kirajzolása fraktáltenisz algoritmussal

program pafrany;
uses graph, crt;
var  h, gd, gm, i: integer;
     x, y: real;

procedure forgat(beta: real);
  var r, alfa: real;
  begin
    r := sqrt(x * x + y * y);
    if x > 0 then alfa := arctan(y / x)
     else if x < 0 then alfa := pi - arctan(y / -x)
           else if y >= 0 then alfa := pi / 2 else alfa := 3/2 * pi;
    x := r * cos(alfa + beta);
    y := r * sin(alfa + beta)
  end;

begin
x := 100; y := 200;
gd := detect;
initgraph(gd, gm, 'c:\bp\bgi');
i := 0;
repeat
  h := random(10);
  if i < 101 then inc(i);
  case h of
     0..6:begin
            y := y * 0.8;
            x := x * 0.8;
            forgat(pi / 25);
            y := y + 110;
       end;
     7:begin
            x := x / 5;
            y := y / 3;
            forgat(-pi / 3);
            y := y + 70;
       end;

     8:begin
            x := x / 5;
            y := y / 3;
            forgat(pi / 3);
            y := y + 100;
       end;
     9:begin
            y := y / 4;
            x := x / 500;
       end
  end;
  if i > 100 then putpixel(round(x) + 300, round(480 - y), green);
until keypressed;
readln;
closegraph;
end.