Напечатать координаты всех точек пересечения отрезков - Pascal

Узнай цену своей работы

Формулировка задачи:

Даны четыре отрезка a, b, c, d, заданные координатами их концов. Напечатать координаты всех точек пересечения этих отрезков. Вычисление координат пересечения двух отрезков оформить в виде процедуры.

Решение задачи: «Напечатать координаты всех точек пересечения отрезков»

textual
Листинг программы
uses crt;
type point=record
           x,y:real;
           end;
     otr=record
         k1,k2:point;
         end;
{проверяем пересекаются ли 2 отрезка}
function Peres(o1,o2:otr):boolean;
var v1,v2,v3,v4:real;
begin
v1:=(o2.k2.x-o2.k1.x)*(o1.k1.y-o2.k1.y)-(o2.k2.y-o2.k1.y)*(o1.k1.x-o2.k1.x);
v2:=(o2.k2.x-o2.k1.x)*(o1.k2.y-o2.k1.y)-(o2.k2.y-o2.k1.y)*(o1.k2.x-o2.k1.x);
v3:=(o1.k2.x-o1.k1.x)*(o2.k1.y-o1.k1.y)-(o1.k1.y-o1.k1.y)*(o2.k1.x-o1.k1.x);
v4:=(o1.k2.x-o1.k1.x)*(o2.k2.y-o1.k1.y)-(o1.k2.y-o1.k1.y)*(o2.k2.x-o1.k1.x);
Peres:=(v1*v2<0) and (v3*v4<0);
end;
{Точка пересечения}
procedure Tochka(o1,o2:otr);
var a,b,c,d,e,f,
    dt,ds,det,t,s: real;
begin 
a:=o1.k2.x-o1.k1.x;
b:=o2.k1.x-o2.k2.x;
c:=o2.k1.x-o1.k1.x;
d:=o1.k2.y-o1.k1.y;
e:=o2.k1.y-o2.k2.y;
f:=o2.k1.y-o1.k1.y;
 
det:=a*e-b*d;
dt:=c*e-f*b;
ds:=a*f-c*d;
t:=dt/det; 
s:=ds/det; 
writeln('x=',o1.k1.x*(1-t)+o1.k2.x*t:0:2,'  y=', o1.k1.y*(1-t)+o1.k2.y*t:0:2);
end;
var t:array[1..4] of otr;
    n,i,j,k:byte;
begin
clrscr;
writeln('Введите координаты концов 4х отрезков:');
for i:=1 to 4 do
 begin
  writeln('Отрезок ',chr(i+96));
  write('x1=');readln(t[i].k1.x);
  write('y1=');readln(t[i].k1.y);
  write('x2=');readln(t[i].k2.x);
  write('y2=');readln(t[i].k2.y);
 end;
writeln('Точки пересечения отрезков:');
k:=0;
for i:=1 to 3 do
for j:=i+1 to 4 do
if Peres(t[i],t[j]) then
 begin
  k:=1;
  Tochka(t[i],t[j]);
 end;
if k=0 then write('Точек пересечения нет');
readln
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы