D


私信TA

用户名:ALS1111

访问量:22109

签 名:

等  级
排  名 55
经  验 11377
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:由于题目中所给的一对点我们并不知道是做对角线的点还是右对角线的点,也不知道是先给的是左下角的点还是右上角的点(以左对角线为例)。因此我们需要先将点的位置确定,接下来就好计算了。

①根据所给的一堆点,我们可以确定(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 人评分

  评论区

  • «
  • »