Пересечение отрезка и окружности
Function cross(x#,y#,r#,x01#,y01#,x02#,y02#)
rr#=r*r
;Проверка на нахождение одного из концов отрезка в круге
If ((x01-x)*(x01-x)+(y01-y)*(y01-y)<=rr) Return 1
If ((x02-x)*(x02-x)+(y02-y)*(y02-y)<=rr) Return 1
;axis-aligned
If(y01=y02)
If (((x01<x And x02>x) Or (x01>x And x02<x)) And Abs(y01-y)<=r) Return 1;
EndIf
;Находим точку (xp,yp) пересечения перпендикуляра от центра круга к линии,
;которой принадлежит отрезок.
a#=(y01-y02)/(x01-x02)
b#=y01-a*x01
xp#=(y-b+x/a)/(a+1/a)
yp#=a*xp+b
If(y01=y02) xp=x:yp=y01
If ((x01<xp And x02>xp) Or (x02<xp And x01>xp))
;Находится внутри круга?
If ((xp-x)*(xp-x)+(yp-y)*(yp-y)<rr) Return 1
EndIf
;Return False
End Function
прикрепил exe и *.bb файлы примера