Определить, имеют ли отрезки, заданные координатами концов, общие точки - 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
. - Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д