Function Circle_Circle_intersect(paX# Var , paY# Var , pbX# Var , pbY# Var , x1# , y1# , r1# , x2# , y2# , r2#) Local dx# = x1 - x2 Local dy# = y1 - y2 Local d2# = dx*dx + dy*dy Local d# = Sqr( d2 ) If d>r1+r2 Or d<Abs(r1-r2) Then Return False'; // no solution Local a# = (r1*r1 - r2*r2 + d2) / (2*d) Local h# = Sqr( r1*r1 - a*a ) Local rx2# = x1 + a*(x2 - x1)/d Local ry2# = y1 + a*(y2 - y1)/d paX# = rx2 + h*(y2 - y1)/d paY# = ry2 - h*(x2 - x1)/d pbX# = rx2 - h*(y2 - y1)/d pbY# = ry2 + h*(x2 - x1)/d Return True End Function
Function intersect( cA:Circle , cB:Circle ) Local R0:Float=cA.r+cB.r Local dx:Float=cA.x - cB.x ' no solution ------------------ If Abs(dx)>R0 Return False Local dy:Float=cA.y - cB.y If Abs(dy)>R0 Return False Local d2# = dx*dx + dy*dy If d2>R0*R0 Return False Local R_:Float=cA.r-cB.r If d2<R_*R_ Return False ' ------------------------------ Local d# = Sqr( d2 ) [...]End Function