问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
100分
#记所给的两个矩形分别为a,b,所给的两点分别是1,2
ax1,ay1,ax2,ay2=list(map(float,input().split()))
bx1,by1,bx2,by2=list(map(float,input().split()))
#因为题目是要求保留两位小数,所以所给数据可能为浮点型数据,故用map()函数将输入的字符串转换成浮点型数据,并加入列表中
#接下来表示相交的矩形的对角线上的点
hx1=min(max(ax1,ax2),max(bx1,bx2))
hy1=min(max(ay1,ay2),max(by1,by2))
hx2=max(min(ax1,ax2),min(bx1,bx2))
hy2=max(min(ay1,ay2),min(by1,by2))
#然后判断相交不相交
if hx2>=hx1 and hy2>=hy1:
x=y=0
else:
x=hx1-hx2
y=hy1-hy2
#若是两个矩形相离则x或者y中会有负值
s=x*y
if s<0:
print("%.2f"%0)
else:
print("%.2f"%s)
做题前需知
此题是一个二维问题,可以先考虑一维时的情况
A(红色)从左向右运动,B(蓝色)从右向左运动【如下图】
那么做两条线段将会有相交和不相交两种情况
二维时
相交的四种情况
不相交的情况
令相交区域的两个对角出坐标为(hx1,hy1)右上,(hx2,hy2)左下
那么综合相交的前三种情况来看
hx1=min(max(ax1,ax2),max(bx1,bx2))
hy1=min(max(ay1,ay2),max(by1,by2))
hx2=max(min(ax1,ax2),min(bx1,bx2))
hy2=max(min(ay1,ay2),min(by1,by2))