private type TLine
DblB As Double
DblK As Double
BoolVert As Boolean
end type
private type TPset
DblX As Double
DblY As Double
btErr As Byte
end type
Private function DetectLine(X1, Y1, X2, Y2 As Double) As TLine
If x1 = x2 then 'вертикальна
DetectLine.boolvert = true
DetectLine.DblB = x1
exit function
else ' собсно не вертикальна )
DetectLine.DblK = (y2 - y1) / (x2 - x1)
DetectLine.DblB = y1 - DetectLine.DblK * x1
end if
End function
Private Function DetectPset(L1, L2 As TLine) As TPset
If L1.DblK = L1.DblK Or (l1.BoolVert And l2.BoolVert) Then
' параллельны
If L1.DblB = L2.DblB then
btErr = 1 'совпадают
Exit Function
else
btErr = 2 'нет общих точек
Exit Function
end if
else
' не параллельны
If l1.BoolVert Then 'одна вертикальна
Detectpset.DblX = L1.DblB
Detectpset.DblY = L2.DblK * Detectpset.DblX + L2.DblB
Exit Function
End if
If L2.BoolVert Then 'другая вертикальна
Detectpset.DblX = L2.DblB
Detectpset.DblY = L1.DblK * Detectpset.DblX + L1.DblB
Exit Function
end if
'общий случай
Detectpset.DblX = (L2.DblB - L1.DblB) / (L1.DblK - L2.DblK)
Detectpset.DblY = L2.DblK * Detectpset.DblX + L2.DblB
end If
end function
pronto писал(а):Всем спасибо за советы, но я просил о таком варианте, в котором можно обойтись без проверки совпадения координат точек - аналитически...
Конь писал(а):А как найти точку пересечения двух Shape (Shape=Circle)?
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 8