解题思路:由于题目中所给的一对点我们并不知道是做对角线的点还是右对角线的点,也不知道是先给的是左下角的点还是右上角的点(以左对角线为例)。因此我们需要先将点的位置确定,接下来就好计算了。
①根据所给的一堆点,我们可以确定(min(x1,x2),min(y1,y2))一定是左下角的点,(max(x1,x2),max(y1,y2))一定是右上角的点。
②重新确定完点的坐标之后,我们知道,如果两个矩形有重合,那么需要满足
第一个矩形左下角的点一定小于第二个矩形右上角的点,
第一个矩形右上角的点一定大于第二个矩形左下角的点。
③若②满足情况,
将四个点的x坐标从小到大排序sort(x11,x12,x21,x22)
将四个点的x坐标从小到大排序sort(y11,y12,y21,y22)
④相交面积 = 排序后x中间的两个点的差值 * 排序后y中间两个点的差值
注意事项:
参考代码:
def function(): A = list(map(float,input().split())) B = list(map(float,input().split())) Anew = [min(A[0],A[2]),min(A[1],A[3]),max(A[0],A[2]),max(A[1],A[3])] #重新定位坐标 Bnew = [min(B[0],B[2]),min(B[1],B[3]),max(B[0],B[2]),max(B[1],B[3])] if (Anew[0] < Bnew[2] and Anew[1] < Bnew[3]) and (Bnew[0] < Anew[2] and Bnew[1] < Anew[3]): #判断是否相交 x = Anew[::2]+Bnew[::2] y = Anew[1::2]+Bnew[1::2] x.sort() #对四个点的x坐标排序 y.sort() #对四个点的y坐标排序 xd = x[2] - x[1] #计算中间两个点的差值 yd = y[2] - y[1] area = xd * yd else: area = 0 print('%.2f' % area) if __name__ == '__main__': function()
0.0分
7 人评分
【回文数(二)】 (C++代码)浏览:874 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:1246 |
WU-格式化数据输出 (C语言代码)浏览:1755 |
WU-C语言程序设计教程(第三版)课后习题12.1 (C++代码)浏览:941 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:549 |
求圆的面积 (C语言代码)浏览:1670 |
Minesweeper (C语言描述,蓝桥杯)浏览:1127 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:683 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:662 |
【计算直线的交点数】 (C语言代码)浏览:923 |