在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45
说明: 假设矩形面积不会超出 int 的范围。
方法:
计算上述类型的矩形面积实际上就是求交叉部分矩形的面积。事实上,根据上述图形可以得出如下的表达式
交叉的面积实际上等于(min(C, G) - max(A, E)) × (min(D, H) - max(B, F))。需要注意的是不能把两个直接相乘,因为当两个矩形不相交的时候,这两个部分可能都是负值,相乘得到了正值,误以为相交了。因此进行计算之后还需要一个对其大小的判断。
最后,分析的过程借鉴了这位博主的文字内容,特此感谢。
https://blog.youkuaiyun.com/fuxuemingzhu/article/details/82973125
最终的AC解为:
class Solution(object):
def computeArea(self, A, B, C, D, E, F, G, H):
"""
:type A: int
:type B: int
:type C: int
:type D: int
:type E: int
:type F: int
:type G: int
:type H: int
:rtype: int
"""
s1 = (C-A)*(D-B)
s2 = (G-E)*(H-F)
x, y = (min(C, G) - max(A, E)), (min(D, H) - max(B, F))
area = 0
if x > 0 and y > 0:
area = x * y
return s1 + s2 - area