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]));
            */
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    Java学习
    Java学习
    Vue.js学习(十五)—— ref和$refs的使用
    Vue.js学习(十四)—— Vue中的导航守卫(路由守卫)
    Vue.js学习(十二)—— Vue 全局挂载自定义函数
    Vue.js学习(十一)—— 项目开始、首页入门(main.js)
    Vue.js学习(十)—— element-ui 实战各种小技巧(长期更新)(转)
    Vue.js学习(九)—— normalize.css在vue中使用
    Vue.js学习(七)—— Vue开发与调试工具之vscode
    Vue.js学习(六)—— 轻量级JS Cookie插件
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12515371.html
Copyright © 2011-2022 走看看