{lissaiove obrazce}
uses graph,crt;
var a,gd,gm,f1,f2,fi1:integer;
input_key:char;

label re_read;

procedure init_values;
          begin
          f1 :=1;
          fi1:=0;
          f2 :=1;
          end;

procedure open_graph;
          begin
          initgraph(GD,GM,'c:\bp\bgi');
          end;

procedure close_graph;
          begin
          CloseGraph;
          end;

function get_fi1(input :string):real;
         begin
         if input='deg' then  get_fi1:=(180/pi)*(fi1*(pi/8))
         else get_fi1:=fi1*(pi/8);
         end;

procedure write_state;
          var f1_str,f2_str,fi1_str:string;
          r1,r2,r3:string;
          begin
          setcolor(11);
          str(f1,f1_str);
          str(f2,f2_str);
          str(get_fi1('deg'):3:0,fi1_str);
          r1:='f_horizon.:'+f1_str;
          r2:='f_vertik.:'+f2_str;
          r3:='faza_fi_vertik.:'+fi1_str;
          outtextxy(0,0,r1);
          outtextxy(0,10,r2);
          outtextxy(0,20,r3);
          end;

procedure paint;
          var i:longint;
          x,y:real;
          begin
          i:=0;
          clearviewport;
          write_state;
          setcolor(15);
          {
          1 - blue
          2 - dark green
          3 - green
          4 - red
          5 - viol.
          6 - brown
          7 - gray
          8 - dark gray
          9 - aqua
          10- light green
          11- light aqua
          12- light red
          13- light viol.
          14- yellow
          15- white
          }
          repeat
          x:=(getmaxx/2) + sin( f1*i/100 + 0)*(getmaxy/3);
          y:=(getmaxy/2) - sin( f2*i/100 + get_fi1('rad'))*(getmaxy/3);

          if i=0 then moveto(round(x),round(y))
           else lineto(round(x),round(y));
          inc(i);
          until KeyPressed or (i>30000);
          end;

begin
writeln('> lissaiove obrazce');
writeln('- skladanie dvoch na seba kolmych sinusovych vlneni');
writeln('- zvacsovanie frekvencie vlneni je pomocou [sipok]');
writeln('- zvacsovanie fazi vertikalneho vlnenie je pomocou [PageUp] [PageDown]');
writeln('- reset [Home]');
writeln('- [Esc] > okoncenie programu');
writeln('stlacte [Enter]');
readln;

init_values;

open_graph;

paint;

repeat
 re_read:;
input_key:=readkey;
case input_key of
 #72: begin inc(f1); paint; end;
 #80: begin dec(f1); paint; end;

 #77: begin inc(f2); paint; end;
 #75: begin dec(f2); paint; end;

 #73: begin inc(fi1); paint; end;
 #81: begin dec(fi1); paint; end;

 #71: begin init_values; paint; end;

 #27: halt;

 else goto re_read;
 end;
until input_key=#27;

close_graph;

end.
