223. 矩形面积(Python)

题目

难度:★★★★☆
类型:数学
方法:分类讨论

传送门

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

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

示例:

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

解答

在CV岗面试中经常遇到的面试题,检测中的iou计算都需要。

合并后的面积等于两个矩形各自面积和减去公共面积。这里需要知道公共矩形区域的坐标,需要分类讨论,实际上可以分成两种情况,计算两个矩形左端中最大的作为公共矩形的左端,右端中最小的作为公共矩形的右端,上端中最小的作为公共矩形的上端,下段中最大的作为公共矩形的下端。获得各个边界线后,需要判断能否构成矩形,需要下端小于上端,左端小于右端,如果不能那么公共区域面积就是零。

class Solution:
    def computeArea(self, A: int, B: int, C: int, D: int, E: int, F: int, G: int, H: int) -> int:
        rect1_left, rect1_right, rect1_top, rect1_down = A, C, D, B
        rect2_left, rect2_right, rect2_top, rect2_down = E, G, H, F

        inter_left = max(rect1_left, rect2_left)
        inter_right = min(rect1_right, rect2_right)
        inter_top = min(rect1_top, rect2_top)
        inter_down = max(rect1_down, rect2_down)

        def get_area(left, right, top, down):
            return (right - left) * (top - down) if right > left and top > down else 0

        area1 = get_area(rect1_left, rect1_right, rect1_top, rect1_down)
        area2 = get_area(rect2_left, rect2_right, rect2_top, rect2_down)
        area_inter = get_area(inter_left, inter_right, inter_top, inter_down)
        return area1 + area2 - area_inter

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(223. 矩形面积(Python))