Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачі обчислювальна геометрія.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
173 Кб
Скачать
☆

I,n:integer;

s:real;

begin

write('n=');

readln(n);

for i:=1 to n do

readln(x[i],y[i]);

x[n+1]:=x[1];

y[n+1]:=y[1];

s:=0;

for i:=1 to n do

s:=s+(x[i]*y[i+1]-x[i+1]*y[i]);

s:=1/2*abs(s);

writeln('s=',s:2:2);

end.

2. Визначення положення точки відносно

n-кутника

Задача 1. Перевірка належності точки прямій

Підставляємо координати точки в рівняння прямої і дивимося, чи є вони рішенням даних рівнянь. Так - належить, Ні - не належить.

Нехай (x1,y1), (x2,y2) – точки на прямій, то рівняння прямої буде наступним: (x-x1)( y2-y1)=(y- y1)(x2-x1).

Функція перевірки належності точки з координатами (x,y) , буде наступна:

Function ft(x,y:real):Boolean;

Begin

If (x-x1)*(y2-y1)=(y- y1)*(x2-x1) then ft:=true else ft:=false;

End;

Задача 2. Перевірка належності точки відрізку

Як визначити, чи належить точка A(x,y) відрізку з кінцевими точками B(x1,y1) і C(x2,y2)?

1) Це можна зробити через довжини відрізків BA+AC=BC.

2) За належністю точки прямій, яка містить відрізок і розміщення точки між початком та кінцем відрізка.

Нехай (x1,y1), (x2,y2) – координати початку і кінця відрізка, то рівняння прямої буде наступним:

(x-x1)( y2-y1)=(y- y1)(x2-x1).

Функція перевірки належності точки з координатами (x,y) , буде наступна:

Function ft(x,y:real):Boolean;

Begin

If (x-x1)*(y2-y1)=(y- y1)*(x2-x1) then

If (((x>=x1)and(x<=x2)and(x1<=x2))or((x>=x2)and(x<=x1)and(x2<=x1)))

then ft:=true else ft:=false;

End;

3) Точки відрізка z можна описати рівнянням

pOB+(1-p)OC=z, 0<=p<=1, OB і ОC - вектори.

Якщо існує таке p, 0<=p<=1, що

pOB+(1-p)OC=A, то А лежить на відрізку, інакше - ні.

Рівність розписується по координатний так:

px1+(1-p)x2=x

py1+(1-p)y2=y

З першого рівняння знаходимо p, підставляємо в друге: якщо одержуємо рівність і 0<=p<=1, то А на відрізку, інакше - ні.

px1+x2-px2=x  p(x1-x2)=x-x2  p= (x-x2)/ (x1-x2)

(x-x2)/ (x1-x2)y1+(1-(x-x2)/(x1-x2))y2=y

Програмний код і тестування проробіть саостійно.

Задача 3. Перевірка належності точки трикутнику

Д ля трикутника можна розробити алгоритм, який обчислює площі трикутників утворених даною точкою і сторонами трикутника, якщо сума утворених трикутників рівна сумі трикутника, то точка належить трикутнику, інакше не належить.

Нехай (x1,y1), (x2,y2), (x3,y3) – координати вершин трикутника;

(x,y) – координати точки для перевірки.

Програмний код:

Program pr4;

var x1,y1,x2,y2,x3,y3,x,y,a1,b1,c1,s1,s2,s3,st:real;

procedure line(xp,yp,xk,yk:real; var l:real);

begin

l:=sqrt(sqr(xp-xk)+sqr(yp-yk));

end;

procedure pl(a,b,c:real; var s:real);

Var p:real;

begin

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

end;

begin

writeln(‘Введіть координати вершин трикутника’);

readln(x1,y1,x2,y2,x3,y3);

writeln(‘Введіть координати точки’);

readln(x,y);

line(x1,y1,x2,y2,a1); line(x1,y1,x,y,b1); line(x2,y2,x,y,c1);

pl(a1,b1,c1,s1);

line(x2,y2,x3,y3,a1); line(x2,y2,x,y,b1); line(x3,y3,x,y,c1);

pl(a1,b1,c1,s2);

line(x3,y3,x1,y1,a1); line(x3,y3,x,y,b1); line(x1,y1,x,y,c1);

pl(a1,b1,c1,s3);

line(x1,y1,x2,y2,a1); line(x2,y2,x3,y3,b1); line(x3,y3,x1,y1,c1);

pl(a1,b1,c1,st);

if s1+s2+s3=st then writeln(‘належить’) else writeln(‘не належить’);

end.

Задача 3. Перевірка належності точки многокутнику

Під належністю точки многокутнику приймається належність точки внутрішній області многокутника або його межі. В тому числі, всі вершини належать многокутнику.

1) Аналогічно до задачі про належність точки трикутнику, можна розв’язати задачу для довільного опуклого многокутника, розбивши його на трикутники.

(x3,y3)

(x2,y2)

(x1,y1)

(x4,y4)

(x,y)

(xn-1,yn-1)

(xn,yn)

Програмний код:

Program Prog 5;