Rectangle Area 矩形面积

二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。

每个矩形由其左下顶点和右上顶点坐标表示,如图所示。

Rectangle Area

示例:

输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45

说明: 假设矩形面积不会超出 int 的范围。

思路:因为求两个矩形的占地面积,所以两个矩形的面积加和之外,还要减去他们相交的面积,而判断二维坐标中两个矩形是否相交已经有解法,那么如何计算是否相交呢,其实就是投影映射法,如果把两个矩形都投影压缩到x轴和y轴,那么在x轴和y轴对应轴上一定都有重叠,所以可以利用重叠的长度相乘即可,x轴重叠长度*y轴重叠长度,但是这样计算还是有些麻烦。还有一种更为简单的方法,类似于收缩面积,确定相交矩形左边界时,取两个矩形最大的左边界,取右边界时取两个矩形最小的右边界,同理对下边界和上边界,这样就能计算出四个边界围成的面积。

参考代码:

class Solution {
public:
    int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int left = max(A, E), right = max(min(C, G), left);
        int bottom = max(B, F), top = max(min(D,H),bottom);
        return (C - A)*(D - B) + (G - E)*(H - F) - (right - left)*(top - bottom);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_26410101/article/details/84920273
今日推荐