矩形面积交

问题描述

  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

  输出仅包含一个实数,为交的面积,保留到小数后两位。


样例输入

1 1 3 3
2 2 4 4

样例输出

1.00


思路:把矩阵看作二维数组。首先遍历第一个二维数组,把遍历过的下标存到一个列表中;然后遍历第二个数组,计算和第一个二维数组重复的下标的个数,即为所求。

Python代码:

a,b,c,d=map(int,input().split())  # 矩形1
x,y,z,r=map(int,input().split())  # 矩形2

minc1,minr1=min(a,c),min(b,d)  # 矩阵1的最小横坐标和最小纵坐标
maxc1,maxr1=max(a,c),max(b,d)  # 矩阵1的最大横坐标和最大纵坐标
minc2,minr2=min(x,z),min(y,r)  # 矩阵2的最小横坐标和最小纵坐标
maxc2,maxr2=max(x,z),max(y,r)  # 矩阵2的最大横坐标和最大纵坐标

s=[]  # 用来存储矩阵1的所有下标
res=0  # 重叠面积

for i in range(minc1,maxc1):  # 遍历矩阵1
    for j in range(minr1,maxr1):
        s.append((i,j))

for i in range(minc2,maxc2):  # 遍历矩阵2
    for j in range(minr2,maxr2):
        if (i,j) in s:
            res+=1

print(res)

这道题其实并不难,我一开始的思路是:

相交面积=相距最远的两个顶点坐标围成的大长方形面积-两个小长方形面积之和

但很快发现这样写不仅繁琐容易出错,而且始终避免不了判断两个长方形是否相交这一步,因此我直接根据题目中给出的样例来写,不必猜测哪个长方形离原点更近等问题,反倒通俗简单:

先假定相交,求出相交长方形的两个顶点坐标,再根据这两个坐标判断是否真的相交。若相交求其面积,否则输出“0.00”。

当然这样做有个前提:若输入的两个矩形的确相交,那么在输入的四组坐标里面,必须含有两组是相交部分矩形的顶点坐标。

另外,我发现Java题目中若要求最后的结果保留几位小数,并不需要进行四舍五入,直接按要求的小数位数输出即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值