求两个矩形的space

获取两个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()
posted @ 2022-05-01 22:47  first_code  阅读(32)  评论(0编辑  收藏  举报