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

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

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

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

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

textual
Листинг программы
  1. uses crt;
  2. const e=0.0001;
  3. var x1,y1,x2,y2,x3,y3,x4,y4,x,y:real;
  4. begin
  5. clrscr;
  6. writeln('Введите координаты концов первого отрезка:');
  7. readln(x1,y1,x2,y2);
  8. writeln('Введите координаты концов второго отрезка:');
  9. readln(x3,y3,x4,y4);
  10. if(abs(x1-x2)<e)and(abs(x3-x4)<e)or(abs((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))<e)then
  11. writeln('Отрезки параллельны')
  12. else
  13.  begin
  14.   if(abs(x1-x2)<e)and(abs(y3-y4)<e)then
  15.    begin
  16.     x:=x1;
  17.     y:=y3;
  18.    end
  19.   else if(abs(x3-x4)<e)and(abs(y1-y2)<e)then
  20.    begin
  21.     x:=x3;
  22.     y:=y1;
  23.    end
  24.   else
  25.    begin
  26.     x:=-((x1*y2-x2*y1)*(x4-x3)-(x3*x4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
  27.     y:=((y3-y4)*(-x)-(x3*y4-x4*y3))/(x4-x3);
  28.    end;
  29.   if((x>=x1)and(x<=x2))or((x>=x2)and(x<=x))then
  30.    begin
  31.     writeln('Отрезки пересекаются ');
  32.     write('x=',x:0:2,' y=',y:0:2);
  33.    end
  34.   else write('Отрезки не пересекаются');
  35.  end;
  36. end.

Объяснение кода листинга программы

  1. Создается переменная e со значением 0.0001.
  2. Создаются переменные x1, y1, x2, y2, x3, y3, x4, y4, x, y типа real.
  3. Выводится сообщение «Введите координаты концов первого отрезка:» и считываются координаты первого отрезка.
  4. Выводится сообщение «Введите координаты концов второго отрезка:» и считываются координаты второго отрезка.
  5. Проверяется условие: если расстояние между концами первого и второго отрезков меньше заданной погрешности e и расстояние между концами третьего и четвертого отрезков меньше e, то отрезки параллельны.
  6. Если условие не выполняется, то проверяется следующее условие: если расстояние между концами первого и третьего отрезков меньше e и расстояние между концами второго и четвертого отрезков меньше e, то отрезки пересекаются.
  7. Если ни одно из условий не выполняется, то вычисляются координаты точки пересечения отрезков.
  8. Выводится сообщение «Отрезки не пересекаются».
  9. Если отрезки пересекаются, то выводятся координаты точки пересечения.

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы