может пригодиться для определения коллизии между игроком и быстролетящем снарядом в играх с видом сверху (сбоку).
Graphics 640,480,16,2
SetBuffer BackBuffer()
x#=Rnd(1,600)
y#=Rnd(1,400)
x1#=Rnd(1,600)
y1#=Rnd(1,400)
x2#=Rnd(1,600)
y2#=Rnd(1,400)
r=20
While Not KeyDown(1)
Cls
circle(x,y,r)
Line x1,y1,x2,y2
If MouseDown(3) Then x=MouseX():y=MouseY()
If MouseDown(1) Then x1=MouseX():y1=MouseY()
If MouseDown(2) Then x2=MouseX():y2=MouseY()
If insect2d(r,x,y,x1,y1,x2,y2) Then Text 10,10,"INSECT!!!"
Flip
Wend
n=10^6
a=MilliSecs()
For i=1 To n
Insect2D(5,7,2,6,i,1,4)
Next
RuntimeError("a="+Str(MilliSecs()-a))
Function circle(x,y,r)
Oval x-r,y-r,r*2,r*2,0
End Function
Function Insect2D(r#,x#,y#,x1#,y1#,x2#,y2#)
mx#=(x2+x1)/2
my#=(y2+y1)/2
d#=Sqr((x1-mx)*(x1-mx)+(y1-my)*(y1-my))
u#=Sqr((mx-x)*(mx-x)+(my-y)*(my-y))
If(u<(d+r))
c#=Sqr((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
If(c=0) Return 1
a#=Sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))
b#=Sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
p#=(a+b+c)/2
s#=Sqr(p*(p-a)*(p-b)*(p-c))
h#=s*2/c
If (h<r) Return 1
EndIf
Return 0
End Function