January 26, 2021, 06:21:17 AM

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

#### BlitzBot

• Jr. Member
• Posts: 1
##### [bb] Distance Between 2 Rectangles by Mr Brine [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
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