Documente Academic
Documente Profesional
Documente Cultură
Program Lab_2_1;
uses crt, Types, Transf, IntersDr, IOGeom;
(****************************************
* Puncte de intersectie:
* Intersectia a doua drepte
****************************************)
var
d1, d2: Dreapta;
p: TPunct;
rel: RelDrepte;
begin
clrscr;
{ Afisarea rezultatului }
case rel of
vid:
writeln('Dreptele sunt paralele!');
incident:
writeln('Dreptele coincid!');
inters:
begin
writeln('Dreptele se intersecteaza in punctul cu coordonatele:');
write_punct(p, '');
end;
else
writeln('Erroare la apel inters_dr()');
end;
readkey;
end.
(****************************************
* Puncte de intersectie:
* Intersectia a unei drepte cu un segment
****************************************)
var d: Dreapta;
s: Segment;
p: TPunct;
rel: RelDrepte;
begin
clrscr;
{ Afisarea rezultatului }
case rel of
vid:
writeln('Dreapta si segmentul nu se intersecteaza!');
incident:
writeln('Segmentul apartine dreptei!');
inters:
begin
writeln('Dreapta intersecteaza segmentul in punctul cu coordonatele:');
write_punct(p, '');
end;
else
writeln('Erroare la apel inters_dr_seg()');
end;
readkey;
end.
(****************************************
* Puncte de intersectie:
* Intersectia a doua segmente
****************************************)
var
a, b: Segment;
p: TPunct;
rel: RelDrepte;
begin
clrscr;
{ Citirea coeficientilor dreptelor de la tastatura }
read_segment(a, 'a');
read_segment(b, 'b');
{ Afisarea rezultatului }
case rel of
vid:
writeln('Segmentele nu se intersecteaza!');
inters:
begin
writeln('Segmentele se intersecteaza in punctul cu coordonatele:');
write_punct(p, '');
end;
else
writeln('Erroare la apel inters_seg_seg()');
end;
readkey;
end.
(****************************************
* Infasuratoarea convexa:
* Algoritmul Graham, varianda Andrew.
****************************************)
const
filein = 'Infasa.txt';
fileout = 'Lab_4_3.txt';
var
p: TabelPuncte;
S: TabelPuncte;
nr, nr_S: integer;
begin
clrscr;
writeln;
(****************************************
* Cea mai apropiata pereche de puncte:
* Algoritmul direct
****************************************)
const
filein = 'Puncte.txt';
var
p: TabelPuncte;
nr, p1, p2: integer;
ro: real;
begin
clrscr;
{ Afisarea coordonatelor }
clrscr;
write_puncte(p, nr);
{ Afisarea rezultatului }
writeln;
writeln('Punctele cele mai apropiate sunt:');
write('p', p1); write_punct(p[p1], '');
writeln;
write('p', p2); write_punct(p[p2], '');
writeln;
writeln('ro = ', ro:5:2);
readkey;
(****************************************
* Aria poligonului simplu
****************************************)
const
filein = 'Poligon.txt';
var
p: TabelPuncte;
nr: integer;
aria: real;
begin
clrscr;
writeln;
(****************************************
* Apartenenta la domeniu:
* Poligon simplu
****************************************)
const
filein = 'Simplu.txt';
var
Polig: TPoligon;
t: TPunct;
{ Afisarea coordonatelor }
clrscr;
write_puncte(p, nr);
{Punctul de verificat}
writeln;
writeln('Scrie coordonatele punctului de verifica la apartenenta:');
read_punct(t, 'p');
{ Afisarea rezultatului }
if apart_polig(p, nr, t) then writeln('Apartine!')
else writeln('Nu apartine!');
readkey;
InitGr(0);
graph.setcolor(WHITE);
drow_poligon(p, nr);
drow_set_puncte(p, nr, GREEN);
drow_punct(t, WHITE);
drow_cerc(t, 5);
delay(1000);
t.x := -MidX/Ratio;
with t do while (x < MidX/Ratio) do begin
y := -MidY/Ratio;
while (y < MidY/Ratio) do begin
if apart_polig(p, nr, t) then drow_punct(t, YELLOW) else drow_punct(t, RED);
y := y + 1/Ratio;
end;
x := x + 1/Ratio;
end;
readkey;
end.
{formare segmente}
k:=0;
for i:=1 to m-1 do
for j:=i+1 to m do
begin
inc(k);
segm[k].p1:=i; segm[k].p2:=j;
segm[k].l:= sqrt(sqr(puncte[i].x -puncte[j].x)+sqr(puncte[i].y -puncte[j].y));
end;
{sortare}
for i:=1 to k-1 do
for j:=1 to k-1 do
if segm[j].l>segm[j+1].l then begin
tmp:=segm[j]; segm[j]:=segm[j+1];
segm[j+1]:=tmp; end; {formare triangularizare}
tr[1]:=segm[1]; n:=1;
for i:=2 to k do
begin
intersect:=false;
for j:=1 to n do
if (sarrus(puncte[tr[j].p1], puncte[tr[j].p2], puncte[segm[i].p1])*
sarrus(puncte[tr[j].p1], puncte[tr[j].p2], puncte[segm[i].p2])<0)
and ( sarrus(puncte[segm[i].p1], puncte[segm[i].p2], puncte[tr[j].p1])*
sarrus(puncte[segm[i].p1], puncte[segm[i].p2], puncte[tr[j].p2])<0)
then intersect:=true;
if not intersect then begin
inc(n);
tr[n]:=segm[i];
end;
end;
for i:=1 to n do
writeln(tr[i].p1, ' ', tr[i].p2, ' ', tr[i].l:0:3);
end.
tr[1]:=segm[1]; n:=1;
for i:=2 to k do
begin
intersect:=false;
for j:=1 to n do
if (sarrus(puncte[tr[j].p1], puncte[tr[j].p2], puncte[segm[i].p1])*
sarrus(puncte[tr[j].p1], puncte[tr[j].p2], puncte[segm[i].p2])<0)
and ( sarrus(puncte[segm[i].p1], puncte[segm[i].p2], puncte[tr[j].p1])*
sarrus(puncte[segm[i].p1], puncte[segm[i].p2], puncte[tr[j].p2])<0)
then intersect:=true;
if not intersect then begin
inc(n);
tr[n]:=segm[i];
end;
end;
for i:=1 to n do
writeln(tr[i].p1, ' ', tr[i].p2, ' ', tr[i].l:0:3);
end.