Определить, имеют ли отрезки, заданные координатами концов, общие точки - Free Pascal
Формулировка задачи:
Помогите пожалуйста решить
Входные данные
Восемь чисел – координаты концов двух отрезков.Выходные данные
Одна строка “YES”, если отрезки имеют общие точки, и “NO” в противном случае.Примеры
входные данные
1 2 1 2 1 2 1 2выходные данные
YESвходные данные
3 3 5 6 5 6 3 3выходные данные
YESРешение задачи: «Определить, имеют ли отрезки, заданные координатами концов, общие точки»
textual
Листинг программы
- const res:array[1..2] of string[3]=('YES','NO');
- var x1,y1,x2,y2,x3,y3,x4,y4,a,b,c,d,e,f,det,t,s,dt,ds:real;
- otv:string[3];
- begin
- readln(x1,y1,x2,y2,x3,y3,x4,y4);
- {вычислим координаты векторов}
- a:=x2-x1;
- b:=x3-x4;
- c:=x3-x1;
- d:=y2-y1;
- e:=y3-y4;
- f:=y3-y1;
- det:=a*e-b*d;{вычислим определитель матрицы}
- if det=0 then otv:=res[2]{прямые не пересекаются}
- else
- begin{определяем принадлежит ли точка пересечения обоим отрезкам}
- dt:=c*e-f*b;
- ds:=a*f-c*d;
- t:=dt/det;
- s:=ds/det;
- if (s>=0) and (s<=1){принадлежит 1}
- and(0<=t) and (t<=1){принадлежит 2} then otv:=res[1]
- else otv:=res[2];
- end;
- write(otv);
- end.
Объяснение кода листинга программы
- Задаются координаты концов отрезков и сохраняются в переменных x1, y1, x2, y2, x3, y3, x4, y4.
- Вычисляются координаты векторов a, b, c, d, e, f.
- Вычисляется определитель матрицы det.
- Если det=0, то прямые не пересекаются и otv присваивается
NO
. - Иначе, вычисляются значения t и s.
- Если (s>=0) and (s<=1), то точка пересечения принадлежит первому отрезку, иначе принадлежит второму.
- Аналогично, если (0<=t) and (t<=1), то точка пересечения принадлежит второму отрезку, иначе принадлежит первому.
- Если оба условия выполняются, то otv присваивается
YES
. - Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д