Egy Koch görbe kirajzolása fraktáltenisz algoritmussal

program koch;
uses
  Graph, crt;
var
  grDriver, grMode, h, j: integer;
  x, y, x1, x2, r, alfa: 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
  grDriver := Detect;
  InitGraph(grDriver, grMode, 'c:\bp\bgi');
  x := 100; y := 200; j := 0;
  cleardevice;
    repeat
        inc(j);
        h := random(4);;
        case h of
           0:begin
                  x := x / 3;
                  y := y / 3;
             end;
           1:begin
                  x := x / 3 + 400;
                  y := y / 3;
             end;
           2:begin
                  x := x / 3;
                  y := y / 3;
                  forgat(pi / 3);
                  x := x + 200;
             end;
           3:begin
                  x := x / 3;
                  y := -y / 3;
                  forgat(2/3 * pi);
                  x := x + 400;
             end;
        end;
        if j > 10 then
          begin
            putpixel(round(x), round(240 - y), green);
            j := 11
          end;
  until keypressed;
  CloseGraph;
end.