注意以下的坐标系屏幕中心点为原点,而非左上角为原点,所以代码和其它地方的不一样,请看清楚哦。
def rect_overlap(rect1,rect2):
"""
rect1:矩形1,四元组,左上角坐标和右下角坐标
rect2:矩形2,四元组,左上角坐标和右下角坐标
本函数返回矩形相交区域的矩形及面积
"""
(x11,y11,x12,y12) = rect1 # 矩形1左上角(x11,y11)和右下角(x12,y12)
(x21,y21,x22,y22) = rect2 # 矩形2左上角(x21,y21)和右下角(x22,y22)
# 下面求最小的外包矩形
startx = min(x11,x21) # 外包矩形在x轴上左边界
endx = max(x12,x22) # 外包矩形在x轴上右边界
starty = min(y12,y22) # 外包矩形在y轴上上边界
endy = max(y11,y21) # 外包矩形在y轴上下边界
# 想像一下两个矩形隔得比较远,那么外包矩形的宽度是不是肯定大于两个矩形的宽度和呢?
# 所以,两个矩形相交,它们的宽度和必然大于最小外包矩形的宽度,它们的高度和也是必然大于外包矩形的高度
width = (x12-x11) + (x22-x21) - (endx-startx) # (endx-startx)表示外包矩形的宽度
height = (y11-y12) + (y21-y22) - (endy-starty) # (endy-starty)表示外包矩形的高度
#height = -height
#print(width,height)
if width<=0 or height<=0: # 不相交
return tuple()
else: # 相交
X1 = max(x11,x21) # 有相交则相交区域位置
Y1 = min(y11,y21)
X2 = min(x12,x22)
Y2 = max(y12,y22)
area = width * height # 相交区域面积
return (X1,Y1,X2,Y2,area)
