解题思路:由于题目中所给的一对点我们并不知道是做对角线的点还是右对角线的点,也不知道是先给的是左下角的点还是右上角的点(以左对角线为例)。因此我们需要先将点的位置确定,接下来就好计算了。
①根据所给的一堆点,我们可以确定(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 人评分
简单的a+b (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:897 |
三角形 (C语言代码)浏览:965 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:821 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:699 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:592 |
1126题解浏览:649 |
局部变量作函数返回值的问题浏览:1028 |
小九九 (C语言描述,不看要求真坑爹)浏览:1006 |