January 26, 2021, 06:21:17 AM

Author Topic: [bb] Distance Between 2 Rectangles by Mr Brine [ 1+ years ago ]  (Read 406 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Distance Between 2 Rectangles
Author : Mr Brine
Posted : 1+ years ago

Description : Calculates the distance between 2 rectangles using the 2 close-est points, doesnt use the sqr() function for speed!

Code :
Code: BlitzBasic
  1. ; (c)oded by Mr Brine
  2. ;
  3. ; Distance Between 2 Rectangles
  4. ;
  5. ; RMB - Set Rect
  6. ; LMB - Quit
  7.  
  8. Graphics 640, 480, 32
  9.  
  10. test()
  11.  
  12. Function Test()
  13.        
  14.         Local cx = 250, cy = 200, cw = 300, ch = 20
  15.         Local mx, my, mw = 120, mh = 40
  16.        
  17.         Repeat
  18.        
  19.                 Cls
  20.  
  21.                 Color $ff, 0, 0
  22.                 Rect mx, my, mw, mh
  23.                
  24.                 Color 0, $ff, 0
  25.                 Rect cx, cy, cw, ch
  26.                
  27.                 Color $ff, $ff, $ff
  28.                 Text 0, 00, "mx:" + mx + "  my:" + my + "  mw:" + mw + "  mh:" + mh
  29.                 Text 0, 12, "cx:" + cx + "  cy:" + cy + "  cw:" + cw + "  ch:" + ch
  30.                 Text 0, 36, "Dist:" + Dist(cx, cy, cw, ch, mx, my, mw, mh)
  31.        
  32.                 If(MouseHit(2) = True)
  33.                
  34.                         cx = MouseX()
  35.                         cy = MouseY()
  36.                
  37.                 Else
  38.                        
  39.                         mx = mx + MouseXSpeed()
  40.                         my = my + MouseYSpeed()
  41.                
  42.                 End If
  43.                
  44.                 If(KeyHit(200) = True) my = my - 1
  45.                 If(KeyHit(208) = True) my = my + 1
  46.                 If(KeyHit(203) = True) mx = mx - 1
  47.                 If(KeyHit(205) = True) mx = mx + 1
  48.        
  49.                 Flip
  50.        
  51.         Until MouseHit(1) = True
  52.        
  53. End Function
  54.  
  55.  
  56.  
  57. Function Dist(cx, cy, cw, ch, ox, oy, ow, oh)
  58.  
  59.         Local oct
  60.  
  61.         ; Determin Octant
  62.         ;
  63.         ; 0 | 1 | 2
  64.         ; __|___|__
  65.         ; 7 | 9 | 3
  66.         ; __|___|__
  67.         ; 6 | 5 | 4
  68.  
  69.         If(cx + cw <= ox)
  70.                
  71.                 If(cy + ch <= oy)
  72.                
  73.                         oct = 0
  74.                
  75.                 Else If(cy => oy + oh)
  76.                
  77.                         oct = 6
  78.                
  79.                 Else
  80.  
  81.                         oct = 7
  82.        
  83.                 End If
  84.                
  85.         Else If(cx => ox + ow)
  86.                
  87.                 If(cy + ch <= oy)
  88.                
  89.                         oct = 2
  90.                
  91.                 Else If(cy => oy + oh)
  92.                
  93.                         oct = 4
  94.                
  95.                 Else
  96.  
  97.                         oct = 3
  98.        
  99.                 End If
  100.                
  101.         Else If(cy + ch <= oy)
  102.        
  103.                 oct = 1
  104.        
  105.         Else If(cy => oy + oh)
  106.        
  107.                 oct = 5
  108.        
  109.         Else
  110.        
  111.                 Return 0
  112.  
  113.         End If
  114.  
  115.         ; Determin Distance based on Quad
  116.         ;
  117.         Select oct
  118.        
  119.                 Case 0
  120.                
  121.                         cx = (cx + cw) - ox
  122.                         cy = (cy + ch) - oy
  123.                        
  124.                         Return -(cx + cy)
  125.                
  126.                 Case 1
  127.                
  128.                         Return -((cy + ch) - oy)
  129.                
  130.                 Case 2
  131.  
  132.                         cx = (ox + ow) - cx
  133.                         cy = (cy + ch) - oy
  134.  
  135.                         Return -(cx + cy)
  136.                
  137.                 Case 3
  138.                
  139.                         Return -((ox + ow) - cx)
  140.                
  141.                 Case 4
  142.                        
  143.                         cx = (ox + ow) - cx
  144.                         cy = (oy + oh) - cy
  145.  
  146.                         Return -(cx + cy)
  147.                                        
  148.                 Case 5
  149.                
  150.                         Return -((oy + oh) - cy)
  151.                
  152.                 Case 6
  153.                
  154.                         cx = (cx + cw) - ox
  155.                         cy = (oy + oh) - cy
  156.  
  157.                         Return -(cx + cy)
  158.  
  159.                 Case 7
  160.                
  161.                         Return -((cx + cw) - ox)
  162.        
  163.         End Select
  164.        
  165. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal