SuperStrict 'graphics 800,600 Global _x1#,_x2#,_x3#,_x4# Global _y1#,_y2#,_y3#,_y4# Global time1%,count1% Global time2%,count2% SeedRnd (123456) Delay(2000) time1=MilliSecs() For Local i%=1 To 50000 _x1=Rnd(0,800) _x2=Rnd(0,800) _x3=Rnd(0,800) _x4=Rnd(0,800) _y1=Rnd(0,600) _y2=Rnd(0,600) _y3=Rnd(0,600) _y4=Rnd(0,600) If LinesCollide(_x1,_y1,_x2,_y2,_x3,_y3,_x4,_y4) Then count1:+1 Next time1=MilliSecs()-time1 Print "Method 1: "+count1+" colisions found in "+time1+" ms" SeedRnd (123456) time2=MilliSecs() For Local i%=1 To 50000 _x1=Rnd(0,800) _x2=Rnd(0,800) _x3=Rnd(0,800) _x4=Rnd(0,800) _y1=Rnd(0,600) _y2=Rnd(0,600) _y3=Rnd(0,600) _y4=Rnd(0,600) If LinesCollide2(_x1,_y1,_x2,_y2,_x3,_y3,_x4,_y4) Then count2:+1 Next time2=MilliSecs()-time2 Print "Method 2: "+count2+" colisions found in "+time2+" ms" Delay(1000) End Function LinesCollide%(x1#,y1#,x2#,y2#,x3#,y3#,x4#,y4#) Local dpx#= x3 - x1 + x4 - x2 Local dpy#= y3 - y1 + y4 - y2 Local qax#= x2 - x1 Local qay#= y2 - y1 Local qbx#= x4 - x3 Local qby#= y4 - y3 Local d#= qay*qbx - qby*qax Local la# = qbx*dpy - qby*dpx Local lb# = qax*dpy - qay*dpx If Abs(la)<=Abs(d) And Abs(lb) <=Abs(d) Then Return True Return False End Function Function LinesCollide2%(x1#,y1#,x2#,y2#,x3#,y3#,x4#,y4#) Local LowerX#,UpperX#,LowerY#,UpperY# Local Ax#,Ay#,Bx#,By#,Cx#,Cy#,d#,e#,f# Ax# = x2 - x1 Bx# = x3 - x4 If Ax<0.0 LowerX = x2 UpperX = x1 Else UpperX = x2 LowerX = x1 End If If Bx>0.0 If UpperX<x4 Or x3<LowerX Then Return False ElseIf (UpperX<x3 Or x4<LowerX) Return False EndIf Ay = y2 - y1 By = y3 - y4 If Ay<0.0 LowerY = y2 UpperY = y1 Else UpperY = y2 LowerY = y1 End If If By>0.0 If UpperY<y4 Or y3<LowerY Then Return False ElseIf UpperY<y3 Or y4<LowerY Return False EndIf Cx = x1 - x3 Cy = y1 - y3 d = (By * Cx) - (Bx * Cy) f = (Ay * Bx) - (Ax * By) If f>0.0 If d<0.0 Or d>f Then Return False ElseIf d>0.0 Or d<f Return False EndIf e = (Ax * Cy) - (Ay * Cx) If f>0.0 Then If e<0.0 Or e>f Then Return False ElseIf e>0.0 Or e<f Then Return False EndIf Return True End Function
Method 1 is always faster for me, H&K's occasionally is slower, but never faster than method 2