Определить, имеют ли отрезки, заданные координатами концов, общие точки - Free Pascal

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

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

Помогите пожалуйста решить

Входные данные

Восемь чисел – координаты концов двух отрезков.

Выходные данные

Одна строка “YES”, если отрезки имеют общие точки, и “NO” в противном случае.

Примеры

входные данные

1 2 1 2 1 2 1 2

выходные данные

YES

входные данные

3 3 5 6 5 6 3 3

выходные данные

YES

Решение задачи: «Определить, имеют ли отрезки, заданные координатами концов, общие точки»

textual
Листинг программы
  1. const res:array[1..2] of string[3]=('YES','NO');
  2. var x1,y1,x2,y2,x3,y3,x4,y4,a,b,c,d,e,f,det,t,s,dt,ds:real;
  3.     otv:string[3];
  4. begin
  5. readln(x1,y1,x2,y2,x3,y3,x4,y4);
  6. {вычислим координаты векторов}
  7. a:=x2-x1;
  8. b:=x3-x4;
  9. c:=x3-x1;
  10. d:=y2-y1;
  11. e:=y3-y4;
  12. f:=y3-y1;
  13. det:=a*e-b*d;{вычислим определитель матрицы}
  14. if det=0 then otv:=res[2]{прямые не пересекаются}
  15. else
  16.  begin{определяем принадлежит ли точка пересечения обоим отрезкам}
  17.   dt:=c*e-f*b;
  18.   ds:=a*f-c*d;
  19.   t:=dt/det;
  20.   s:=ds/det;
  21.   if (s>=0) and (s<=1){принадлежит 1}
  22.   and(0<=t) and (t<=1){принадлежит 2} then otv:=res[1]
  23.   else otv:=res[2];
  24.  end;
  25. write(otv);
  26. 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

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

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

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