{dzialanie:
1.zapisanie 100 przypadkowych punktow tablicy(x,y,color)
2.wywolanie procedury ktora rozpocznie iteracje kazdego z punktow z 1.
3.po dojsciu do n-tego poziomu kazdego z punktow, algorytm zakonczy dzialanie
program w trybie rzeczywistym tworzy obraz kolejnych przeksztalcen zbioru poczatkowego
}

uses Crt, Graph;
var
 n,i,j,Gd,Gm: Integer;
 tab: array[1..100,1..3] of word;

{ustala zbior poczatkowy}
procedure rysuj_wzor;
 var
  c,x,y,i:integer;

 begin

  {przypadkowe punkty}
  {zapisuje do tablicy}
  for i:=1 to 100 do
   begin
    x:=random(getmaxx)-(getmaxx div 2);
    y:=random(getmaxy)-(getmaxy div 2);
    c:=random(getmaxcolor);

    tab[i,1] := x;
    tab[i,2] := y;
    tab[i,3] := c;

    putpixel(x,y,c);

   end;

 end;

{proces iteracji}
procedure iteruj(x,y,c,poziom:integer);
var
 nx1,ny1,nx2,ny2:integer;
 begin

  if poziom <= n then
    begin
      nx1 := round(-0.4*x + -1);
      ny1 := round(-0.4*y + 0.1);

      nx2 := round(0.76*x - 0.4*y);
      ny2 := round(0.4*x + 0.76*y);

      {przekazanie glebszemu poziomowi iteracji}
      inc(poziom);
      iteruj(nx1,ny1,c,poziom);
      iteruj(nx2,ny2,c,poziom);

      {na ekran}
      putpixel(nx1+320,ny1+240,c);
      putpixel(nx2+320,ny2+240,c);

    end;
 end;

{modyfikacja zbioru poczatkowego}
{znajdujacego sie w tablicy}
procedure modyfikuj;
var
 nx1,ny1,nx2,ny2,x,y:word;
 color:byte;
 begin
   for i:=1 to 100 do
    begin
      {dokonuje operacji na pixelach}
      {o kolorze roznym od czarnego}
      if (tab[i,3] > 0) then
       begin
         x:=tab[i,1];
         y:=tab[i,2];
         color:= tab[i,3];
         iteruj(x,y,color,1);
       end;
    end;

 end;

begin
 Writeln('Po podaniu liczby, wlaczy sie tryb graficzny');
 Write('Podaj liczbe iteracji n=');
 readln(n);

 Gd := Detect;
 InitGraph(Gd, Gm, 'bgi/');
 if GraphResult <> grOk then Halt(1);
 Randomize;

 rysuj_wzor;

 {ekran_to_tab;}

 modyfikuj;

 Readln;
 CloseGraph;

end.

