126
Dx = Dx - (х2 - х1)*[(у4 - у3)*х3 - (х4 - х3)*у3]
Dy = (у2 - у1)*[(у4 - у3)*х3 - (х4 - х3)*у3]
Dy = Dy - [(у2 - yl)*xl - (х2 - х1)*у1]*(у4 - уЗ)
х = Dx/D
у = Dy/D
? х; у
return
lin 1: 'отрезки на одной прямой
d2 = (х2 - х1)*(х2 - х1) + (у2 - у1)*(у2 - 1)
d3 = (хЗ - х1)*(х2 - х1) + (уЗ - у1)*(у2 - 1)
d4 = (х4 - xl)*(x2 - х1) + (у4 - у1)*(у2 - 1)
if d3 > d2 and d4 > d2 then
' нет пересечения
Iseif d3 < 0 and d4 < 0 then
' нет пересечения
else ' отрезки пересекаются:
gosub otrеz ' общий отрезок
end if
return
otrez: 'расчет общего отрезка
np = np + 1
? «отрезок пересечения:»
if d3 < 0 or d4 < 0 then
? х1; у1; «-»
elseif d3 < d4 then
? х3; у3; «-»
else
? х4; у4; «-»
end if
if d2 < d3 or d2 < d4 then
? х2; у2
elseif d3 < d4 then
? x3; y3
else
? х4; у4
end if
return
vvod: ' ввод данных
restore test1
read n
? «точек:»;nt
for k = 1 to nt
read x(k), y(k)
? x(k); y(k)
next kn
t = nt + 1
x(nt) = x(l)
y(nt) = y(l)
return
test1: 'точки ломаной:
data 4
data 0, 0
|