Program Lab_6_2;
uses crt, Types, OPolig, Poligon, IOGeom, GrGeom, Punct, Graph;

(****************************************
 * Apartenenta la domeniu:
 * Poligon stelat
 ****************************************)

const
  filein  = 'Stelat.txt';

var
  Polig: TPoligon;
  t, C: TPunct;

procedure drow_poz(t: TPunct);
begin
    print_poz(t, 0, TextHeight('H')*3, 'T');
    drow_punct(t, WHITE);
    drow_cerc(t, 5);
end;

begin
Polig.Init(MAX_ELEM);
with Polig do begin
  clrscr;

  { Citirea datelor din fisierul <filein>, daca exista }
  nr := readf_puncte(filein, p^);

  if nr = 0 then nr := gen_polig_stel(p^, 10, ZeroP)+1;
  { Citirea coordonatelor punctelor de la tastatura }
  if nr = 0 then begin
    writeln('Introdu nr de puncte: ');
    readln(nr);
    writeln('Introdu coordonatele varfurilor poligonului convex: ');
    read_puncte(p^, nr);
    writeln('Introdu coordonatele unui punct din care se vad toate varfurile poligonului:');
    read_punct(C, 'c');
    p^[nr] := C; {Pentru a fi salvat in fisier}
    {Salvarea punctelor in fisier}

  end else begin
    dec(nr); {p[nr] este originea poligonului stelat}
    C := p^[nr];
  end;
    writef_puncte(filein, p^, nr+1);

  { Afisarea coordonatelor }
  clrscr;
  write_puncte(p^, nr);
  write_punct(C, 'c');

  {Punctul de verificat}
  writeln;
  writeln('Scrie coordonatele punctului de verifica la apartenenta:');
  read_punct(t, 'p');

  { Afisarea rezultatului }
  if apart_stel(p^, nr, C, t) then writeln('Apartine!')
                             else writeln('Nu apartine!');
  readkey;


  InitGr(0);
  graph.setcolor(GREEN);
  drow_poligon(p^, nr);
  drow_set_puncte(p^, nr, RED);
  drow_punct(C, RED);
  print_poz(C, 1, 1, 'C');

  drow_poz(t);
  repeat
    if keypressed then begin
      drow_poz(t);
      if move_punct(t, 10, ReadKey) = #27 then Break;
      if apart_stel(p^, nr, C, t) then SetColor(GREEN) else SetColor(RED);
      drow_poz(t);
    end;
  until false;

  CloseGr;
  Halt(0);
end;
Polig.Done;
end.
