July 25, 2021, 16:14:56

### Author Topic: [bb] LineRectIntersection by Markus Rosse [ 1+ years ago ]  (Read 705 times)

#### BlitzBot

• Jr. Member
• Posts: 1
##### [bb] LineRectIntersection by Markus Rosse [ 1+ years ago ]
« on: June 29, 2017, 00:28:38 »
Title : LineRectIntersection
Author : Markus Rosse
Posted : 1+ years ago

Description : This Function determine if a Line and a Rectangle intersect

Code :
Code: BlitzBasic
1. Global LineRectIntersectionX#,LineRectIntersectionY# ; Important!
2. ;----------------------------------------------------------------------------------------------------
3. ; This Function determine if a Line and a Rectangle intersect. If there is a intersection, the
4. ; Function returns TRUE, otherwise FALSE. The Coordinates of the first Intersection of the Line
5. ; are returned in the global Variables LineRectIntersectionX# and LineRectIntersectionY#.
6. ;----------------------------------------------------------------------------------------------------
7. Function LineRectIntersection(LineX1#,LineY1#,LineX2#,LineY2#,RectX#,RectY#,RectWidth#,RectHeight#)
8. Local b#,m#,x#,Intersection
9. If LineY1#=LineY2#
10.         If LineX1#<LineX2#
11.                 For x#=LineX1# To LineX2#
12.                         If x#>=RectX# And x#<=RectX#+RectWidth# And LineY1#>=RectY# And LineY1#<=RectY#+RectHeight#
13.                                 LineRectIntersectionX#=x#
14.                                 LineRectIntersectionY#=y#
15.                                 Intersection=True
16.                         End If
17.                 Next
18.         Else
19.                 For x#=LineX1# To LineX2# Step -1
20.                         If x#>=RectX# And x#<=RectX#+RectWidth# And LineY1#>=RectY# And LineY1#<=RectY#+RectHeight#
21.                                 LineRectIntersectionX#=x#
22.                                 LineRectIntersectionY#=y#
23.                                 Intersection=True
24.                         End If
25.                 Next
26.         End If
27. ElseIf LineX1#=LineX2#
28.         If LineY1#<LineY2#
29.                 For y#=LineY1# To LineY2#
30.                         If LineX1#>=RectX# And LineX1#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
31.                                 LineRectIntersectionX#=x#
32.                                 LineRectIntersectionY#=y#
33.                                 Intersection=True
34.                         End If
35.                 Next
36.         Else
37.                 For y#=LineY1# To LineY2# Step -1
38.                         If LineX1#>=RectX# And LineX1#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
39.                                 LineRectIntersectionX#=x#
40.                                 LineRectIntersectionY#=y#
41.                                 Intersection=True
42.                         End If
43.                 Next
44.         End If
45. Else
46.         m#=(LineY1#-LineY2#)/(LineX1#-LineX2#)
47.         b#=LineY1#-(m#*LineX1)
48.         If LineX1#<LineX2#
49.                 For x#=LineX1# To LineX2#
50.                         y#=(m#*x#)+b#
51.                         If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
52.                                 LineRectIntersectionX#=x#
53.                                 LineRectIntersectionY#=y#
54.                                 Intersection=True
55.                         End If
56.                 Next
57.         Else
58.                 For x#=LineX1# To LineX2# Step -1
59.                         y#=(m#*x#)+b#
60.                         If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
61.                                 LineRectIntersectionX#=x#
62.                                 LineRectIntersectionY#=y#
63.                                 Intersection=True
64.                         End If
65.                 Next
66.         End If
67.         If Not Intersection
68.                 If LineY1#<LineY2#
69.                         For y#=LineY1# To LineY2#
70.                                 x#=(y#-b#)/m#
71.                                 If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
72.                                         LineRectIntersectionX#=x#
73.                                         LineRectIntersectionY#=y#
74.                                         Intersection=True
75.                                 End If
76.                         Next
77.                 Else
78.                         For y#=LineY1# To LineY2# Step -1
79.                                 x#=(y#-b#)/m#
80.                                 If x#>=RectX# And x#<=RectX#+RectWidth# And y#>=RectY# And y#<=RectY#+RectHeight#
81.                                         LineRectIntersectionX#=x#
82.                                         LineRectIntersectionY#=y#
83.                                         Intersection=True
84.                                 End If
85.                         Next
86.                 End If
87.         End If
88. End If
89. Return Intersection
90. End Function