161
d213 = (у2 - yl)*(x3 - х1) - (х2 - х1)*(у3 - у1)
d214 = (у2 - у1)*(х4 - х1) - (х2 - х1)*(у4 - у1)
d431 = (у4 - у3)*(х1 - хЗ) - (х4 - х3)*(у1 - уЗ)
d432 = (у4 - у3)*(х2 - хЗ) - (х4 - х3)*(у2 - уЗ)
if d213*d2l4 > 0 or d431*d432 > 0 then
' нет пересечения
elseifd213*d214 < 0 or d431*d432 < 0 then
gosub tchki ' расчет точки
else ' отрезки на одной прямой
gosub lin 1
end if
return
tchki: ' расчет точки пересечения
np = np+1
? «отрезок:»; k; k + 1
? «отрезок:»; I; I + 1
D = (у2 - yl)*(x4 - хЗ) - (х2 - х1)*(у4 - уЗ)
Dx = [(у2 - у1)*х1 - (х2 - х1)*у1]*(х4 - хЗ)
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
|