Пересечение 2-х отрезков - Pascal ABC

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

Есть формула
x:=-((x1*y2-x2*y1)*(x4-x3)-(x3*x4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
    y:=((y3-y4)*(-x)-(x3*y4-x4*y3))/(x4-x3);
но эта формула не работает, если один из отрезков параллелен оси Х или У как мне найти в таком случае точку пересечения этих отрезков?

Код к задаче: «Пересечение 2-х отрезков - Pascal ABC»

textual
uses crt;
const e=0.0001;
var x1,y1,x2,y2,x3,y3,x4,y4,x,y:real;
begin
clrscr;
writeln('Введите координаты концов первого отрезка:');
readln(x1,y1,x2,y2);
writeln('Введите координаты концов второго отрезка:');
readln(x3,y3,x4,y4);
if(abs(x1-x2)<e)and(abs(x3-x4)<e)or(abs((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))<e)then
writeln('Отрезки параллельны')
else
 begin
  if(abs(x1-x2)<e)and(abs(y3-y4)<e)then
   begin
    x:=x1;
    y:=y3;
   end
  else if(abs(x3-x4)<e)and(abs(y1-y2)<e)then
   begin
    x:=x3;
    y:=y1;
   end
  else
   begin
    x:=-((x1*y2-x2*y1)*(x4-x3)-(x3*x4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
    y:=((y3-y4)*(-x)-(x3*y4-x4*y3))/(x4-x3);
   end;
  if((x>=x1)and(x<=x2))or((x>=x2)and(x<=x))then
   begin
    writeln('Отрезки пересекаются ');
    write('x=',x:0:2,' y=',y:0:2);
   end
  else write('Отрезки не пересекаются');
 end;
end.

11   голосов, оценка 4.182 из 5


СОХРАНИТЬ ССЫЛКУ