December 04, 2020, 11:03:41 AM

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

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] LineRectIntersection by Markus Rosse [ 1+ years ago ]
« on: June 29, 2017, 12:28:38 AM »
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


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal