Пересечение 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-х отрезков»
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.
Объяснение кода листинга программы
- Создается переменная
e
со значением 0.0001. - Создаются переменные
x1
,y1
,x2
,y2
,x3
,y3
,x4
,y4
,x
,y
типаreal
. - Выводится сообщение «Введите координаты концов первого отрезка:» и считываются координаты первого отрезка.
- Выводится сообщение «Введите координаты концов второго отрезка:» и считываются координаты второго отрезка.
- Проверяется условие: если расстояние между концами первого и второго отрезков меньше заданной погрешности
e
и расстояние между концами третьего и четвертого отрезков меньшеe
, то отрезки параллельны. - Если условие не выполняется, то проверяется следующее условие: если расстояние между концами первого и третьего отрезков меньше
e
и расстояние между концами второго и четвертого отрезков меньшеe
, то отрезки пересекаются. - Если ни одно из условий не выполняется, то вычисляются координаты точки пересечения отрезков.
- Выводится сообщение «Отрезки не пересекаются».
- Если отрезки пересекаются, то выводятся координаты точки пересечения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д