Определить, имеют ли отрезки, заданные координатами концов, общие точки - 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.

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

  1. Задаются координаты концов отрезков и сохраняются в переменных x1, y1, x2, y2, x3, y3, x4, y4.
  2. Вычисляются координаты векторов a, b, c, d, e, f.
  3. Вычисляется определитель матрицы det.
  4. Если det=0, то прямые не пересекаются и otv присваивается NO.
  5. Иначе, вычисляются значения t и s.
  6. Если (s>=0) and (s<=1), то точка пересечения принадлежит первому отрезку, иначе принадлежит второму.
  7. Аналогично, если (0<=t) and (t<=1), то точка пересечения принадлежит второму отрезку, иначе принадлежит первому.
  8. Если оба условия выполняются, то otv присваивается YES.
  9. Результат выводится на экран.

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


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

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

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