Code archives/Algorithms/LineRectIntersection

This code has been declared by its author to be Public Domain code.

Download source code

LineRectIntersection by Markus Rosse2006
This Function determine if a Line and a Rectangle intersect
Global LineRectIntersectionX#,LineRectIntersectionY# ; Important!
;----------------------------------------------------------------------------------------------------
; This Function determine if a Line and a Rectangle intersect. If there is a intersection, the
; Function returns TRUE, otherwise FALSE. The Coordinates of the first Intersection of the Line
; are returned in the global Variables LineRectIntersectionX# and LineRectIntersectionY#.
;----------------------------------------------------------------------------------------------------
Function LineRectIntersection(LineX1#,LineY1#,LineX2#,LineY2#,RectX#,RectY#,RectWidth#,RectHeight#)
Local b#,m#,x#,Intersection
If LineY1#=LineY2#
	If LineX1#<LineX2#
		For x#=LineX1# To LineX2#
			If x#>=RectX# And x#<=RectX#+RectWidth# And LineY1#>=RectY# And LineY1#<=RectY#+RectHeight#
				LineRectIntersectionX#=x#
				LineRectIntersectionY#=y#
				Intersection=True
			End If
		Next
	Else
		For x#=LineX1# To LineX2# Step -1
			If x#>=RectX# And x#<=RectX#+RectWidth# And LineY1#>=RectY# And LineY1#<=RectY#+RectHeight#
				LineRectIntersectionX#=x#
				LineRectIntersectionY#=y#
				Intersection=True
			End If
		Next
	End If
ElseIf LineX1#=LineX2#
	If LineY1#<LineY2#
		For y#=LineY1# To LineY2#
			If LineX1#>=RectX# And LineX1#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
				LineRectIntersectionX#=x#
				LineRectIntersectionY#=y#
				Intersection=True
			End If
		Next
	Else
		For y#=LineY1# To LineY2# Step -1
			If LineX1#>=RectX# And LineX1#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
				LineRectIntersectionX#=x#
				LineRectIntersectionY#=y#
				Intersection=True
			End If
		Next
	End If
Else
	m#=(LineY1#-LineY2#)/(LineX1#-LineX2#)
	b#=LineY1#-(m#*LineX1)
	If LineX1#<LineX2#
		For x#=LineX1# To LineX2#
			y#=(m#*x#)+b#
			If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
				LineRectIntersectionX#=x#
				LineRectIntersectionY#=y#
				Intersection=True
			End If
		Next
	Else
		For x#=LineX1# To LineX2# Step -1
			y#=(m#*x#)+b#
			If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
				LineRectIntersectionX#=x#
				LineRectIntersectionY#=y#
				Intersection=True
			End If
		Next
	End If
	If Not Intersection
		If LineY1#<LineY2#
			For y#=LineY1# To LineY2#
				x#=(y#-b#)/m#
				If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
					LineRectIntersectionX#=x#
					LineRectIntersectionY#=y#
					Intersection=True
				End If
			Next
		Else
			For y#=LineY1# To LineY2# Step -1
				x#=(y#-b#)/m#
				If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
					LineRectIntersectionX#=x#
					LineRectIntersectionY#=y#
					Intersection=True
				End If
			Next
		End If
	End If
End If
Return Intersection
End Function

Comments

None.

Code Archives Forum