获取两个Rect之间的space:
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle, Polygon
def draw_rect(bb, ax, color='black'):
ax.add_patch(Rectangle(bb[:2], bb[2] - bb[0], bb[3] - bb[1], fill=False, color=color))
def draw_rect_lst(bb_lst, ax, color='black'):
for bb in bb_lst:
draw_rect(bb, ax, color)
def rect_distance(bb1, bb2):
b1_x0, b1_y0, b1_x1, b1_y1 = bb1
b2_x0, b2_y0, b2_x1, b2_y1 = bb2
left = b2_x1 < b1_x0
right = b2_x0 > b1_x1
bottom = b2_y1 < b1_y0
top = b2_y0 > b1_y1
dist = None
v = None
if top and left:
pass
elif top and right:
pass
elif bottom and left:
pass
elif bottom and right:
pass
elif top:
dist = b2_y0 - b1_y1
v = (b1_x1, b1_y1, b1_x1, b1_y1 + dist)
elif bottom:
dist = b1_y0 - b2_y1
v = (b1_x0, b1_y0, b1_x0, b1_y0 - dist)
elif left:
dist = b1_x0 - b2_x1
v = (b1_x0, b1_y0, b1_x0 - dist, b1_y0)
elif right:
dist = b2_x0 - b1_x1
v = (b1_x1, b1_y1, b1_x1 + dist, b1_y1)
return dist, v
fig, ax = plt.subplots()
ax.plot([10, 10], [10, 10])
rect1 = (10, 10, 40, 40)
rect2 = (30, 50, 70, 80)
rect_lst = [rect1, rect2]
draw_rect(rect1, ax, 'red')
draw_rect(rect2, ax, 'blue')
dist, v = rect_distance(rect1, rect2)
if dist:
print(dist, v)
print(v[:2], v[2:])
plt.plot([v[0], v[2]], [v[1], v[3]], color='green')
plt.show()