def rectangle_to_rectangle_distance(ca, cb, wa, wb, ha, hb):
a1 = ca + np.array([wa/2.0, ha/2.0])
a2 = ca + np.array([wa/2.0, -ha/2.0])
a3 = ca + np.array([-wa/2.0, -ha/2.0])
a4 = ca + np.array([-wa/2.0, ha/2.0])
b1 = cb + np.array([wb/2.0, hb/2.0])
b2 = cb + np.array([wb/2.0, -hb/2.0])
b3 = cb + np.array([-wb/2.0, -hb/2.0])
b4 = cb + np.array([-wb/2.0, hb/2.0])
for e1, e2 in product(rectangle_edges(a1,a2,a3,a4), rectangle_edges(b1,b2,b3,b4)):
if segments_intersect(e1[0], e1[1], e2[0], e2[1]):
return 0.0
da1 = point_to_rectangle_distance(a1, cb, wb, hb)
da2 = point_to_rectangle_distance(a2, cb, wb, hb)
da3 = point_to_rectangle_distance(a3, cb, wb, hb)
da4 = point_to_rectangle_distance(a4, cb, wb, hb)
db1 = point_to_rectangle_distance(b1, ca, wa, ha)
db2 = point_to_rectangle_distance(b2, ca, wa, ha)
db3 = point_to_rectangle_distance(b3, ca, wa, ha)
db4 = point_to_rectangle_distance(b4, ca, wa, ha)
return min([da1, da2, da3, da4, db1, db2, db3, db4])
评论列表
文章目录