Graphics 640,480,0,0
Type TPoint
Field X:Float
Field Y:Float
End Type
Type TLine
Field startPoint:TPoint
Field endPoint:TPoint
Field thickness:Float = 10.5
End Type
Global line:TLine = New TLine
line.startPoint = New TPoint
line.startPoint.x = 10
line.startPoint.y = 10
line.endPoint = New TPoint
line.endPoint.x = 200
line.endPoint.y = 300
While Not KeyDown(KEY_ESCAPE)
Cls
If IsOnLine(MouseX(), MouseY(), line.startPoint.x, line.startPoint.y, line.endPoint.x, line.endPoint.y, line.thickness) Then
SetColor(255,0,0)
Else
SetColor(255,255,255)
EndIf
DrawLine(line.startPoint.x, line.startPoint.y, line.endPoint.x, line.endPoint.y)
Flip
Wend
End
Function IsOnLine(px:Float,py:Float,ax:Float,ay:Float,bx:Float,by:Float,radius:Float=1.5)
Local vx:Float,vy:Float,wx:Float,wy:Float,c1:Float,c2:Float,bb:Float,dd:Float
vx:Float = bx - ax
vy:Float = by - ay
wx:Float = px - ax
wy:Float = py - ay
c1:Float = wx*vx + wy*vy
If c1 <= 0
If ((px-ax)^2+(py-ay)^2)=>(radius^2) Then Return False
End If
c2:Float = vx*vx + vy*vy
If c2<=c1
If ((px-bx)^2+(py-by)^2)=>(radius^2) Then Return False
End If
bb:Float = c1 / c2
If Sqr((ax + (bb*vx)-px)^2 + (ay + (bb*vy)-py)^2)<radius Then Return True
End Function
Thanks to Fredborg for the IsOnLine function (direct conversion from B3D)