zoukankan      html  css  js  c++  java
  • 836:矩形重叠(C++)

    题目地址:https://leetcode-cn.com/problems/rectangle-overlap/

    题目描述

    矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形,判断它们是否重叠并返回结果。

    题目示例

    示例 1:

    输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
    输出:true


    示例 2:

    输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
    输出:false

    说明:两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出;矩形中的所有坐标都处于 -10^9 和 10^9 之间。

    解题思路

    位置判断法:我们利用反向思考的方法,思考什么条件下两个矩形不会重叠,即不产生矩阵重建的条件是什么?然后对不满足重叠的条件取反,即可得到重叠。通过画图,可以很容易发现,不产生重叠的位置总共有四个,分别是上侧、下侧、左侧和右侧。为了便于理解,我用下面图例来阐述,比较发现当满足以下几个条件时,不产生重叠,即

    • rec1[2] <= rec2[0]  //矩形rec1右侧无重叠
    • rec2[3] <= rec1[1]  //矩形rec1下侧无重叠
    • rec1[3] <= rec2[1]  //矩形rec1上侧无重叠
    • rec2[2] <= rec1[0]  // 矩形rec1左侧无重叠

    投影法:从数学角度来看,矩形重叠会产生重叠区域,那么,重叠区域可以用投影线段来衡量,在水平方向上的投影矩阵rec1是(rec1[0],rec1[2]),而矩阵rec2是(rec2[0],rec2[2]),竖直方向的投影两个矩阵rec1和rec2分别是(rec1[1],rec1[3])和(rec2[1],rec2[3])。我们发现,当水平方向上满足min(rec1[2],rec2[2]) > max(rec1[0],rec2[0])时,产生水平交集,同样的,当竖直方向上满足min(rec1[3],rec2[3]) > max(rec1[1],rec2[1])时,产生竖直交集。

    程序源码

    class Solution {
    public:
        bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
            // 位置法
            return !(rec1[2] <= rec2[0] || //右侧
                     rec2[3] <= rec1[1] || //下侧
                     rec1[3] <= rec2[1] || //上侧
                     rec2[2] <= rec1[0]);  //左侧
            /* 投影法
             return (min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) &&
                     min(rec1[3], rec2[3]) > max(rec1[1], rec2[1]));
            */
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    Tkinter之布局管理pack
    Python smtplib,email
    PyAutoGUI (2) 屏幕处理和弹框,输入中文
    键鼠操作自动化库--PyAutoGUI模块(1)
    python----->>删除超过固定天数的日志
    Transformer再下一城!Swin-Unet:首个纯Transformer的医学图像分割网络
    西门子S7-1200 PLC 水箱水位控制程序案例
    【开源】Transformer 在CV领域全面开花:新出跟踪、分割、配准等总结
    Google发布语义分割新数据集!顺带开发个模型屠榜,已被CVPR2021接收
    YOLOv5算什么,这个才是最强!---PP-YOLOv2
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12515371.html
Copyright © 2011-2022 走看看