Напечатать координаты всех точек пересечения отрезков - Pascal
Формулировка задачи:
Даны четыре отрезка a, b, c, d, заданные координатами их концов. Напечатать координаты всех точек пересечения этих отрезков. Вычисление координат пересечения двух отрезков оформить в виде процедуры.
Решение задачи: «Напечатать координаты всех точек пересечения отрезков»
textual
Листинг программы
uses crt; type point=record x,y:real; end; otr=record k1,k2:point; end; {проверяем пересекаются ли 2 отрезка} function Peres(o1,o2:otr):boolean; var v1,v2,v3,v4:real; begin v1:=(o2.k2.x-o2.k1.x)*(o1.k1.y-o2.k1.y)-(o2.k2.y-o2.k1.y)*(o1.k1.x-o2.k1.x); v2:=(o2.k2.x-o2.k1.x)*(o1.k2.y-o2.k1.y)-(o2.k2.y-o2.k1.y)*(o1.k2.x-o2.k1.x); v3:=(o1.k2.x-o1.k1.x)*(o2.k1.y-o1.k1.y)-(o1.k1.y-o1.k1.y)*(o2.k1.x-o1.k1.x); v4:=(o1.k2.x-o1.k1.x)*(o2.k2.y-o1.k1.y)-(o1.k2.y-o1.k1.y)*(o2.k2.x-o1.k1.x); Peres:=(v1*v2<0) and (v3*v4<0); end; {Точка пересечения} procedure Tochka(o1,o2:otr); var a,b,c,d,e,f, dt,ds,det,t,s: real; begin a:=o1.k2.x-o1.k1.x; b:=o2.k1.x-o2.k2.x; c:=o2.k1.x-o1.k1.x; d:=o1.k2.y-o1.k1.y; e:=o2.k1.y-o2.k2.y; f:=o2.k1.y-o1.k1.y; det:=a*e-b*d; dt:=c*e-f*b; ds:=a*f-c*d; t:=dt/det; s:=ds/det; writeln('x=',o1.k1.x*(1-t)+o1.k2.x*t:0:2,' y=', o1.k1.y*(1-t)+o1.k2.y*t:0:2); end; var t:array[1..4] of otr; n,i,j,k:byte; begin clrscr; writeln('Введите координаты концов 4х отрезков:'); for i:=1 to 4 do begin writeln('Отрезок ',chr(i+96)); write('x1=');readln(t[i].k1.x); write('y1=');readln(t[i].k1.y); write('x2=');readln(t[i].k2.x); write('y2=');readln(t[i].k2.y); end; writeln('Точки пересечения отрезков:'); k:=0; for i:=1 to 3 do for j:=i+1 to 4 do if Peres(t[i],t[j]) then begin k:=1; Tochka(t[i],t[j]); end; if k=0 then write('Точек пересечения нет'); readln end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д