LeetCode-836. Rectangle Overlap(矩形重叠)

矩形重叠

在这里插入图片描述

Rectangle Overlap

在这里插入图片描述

方法一:位置检查
检查不重合的时候。

class Solution {
public:
    bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
        return !(rec1[2] <= rec2[0] ||   // 左
                 rec1[3] <= rec2[1] ||   // 下
                 rec1[0] >= rec2[2] ||   // 右
                 rec1[1] >= rec2[3]);    // 上
    }
};

方法二:IoU
将矩形两边分别投影到x,y轴上
我们首先可以试着想一维的情况,也就是在x轴上,判断两个线段是否相交。如果相交,相交部分的左端点一定是两个线段左端点取大,相交部分的右端点是两个线段的后端点取小。那就先算出这两个值,然后再比一下相交部分的左端点是否小于右端点。
由此可以推广到多维。

class Solution {
public:
    bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
        return (min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) &&
                min(rec1[3], rec2[3]) > max(rec1[1], rec2[1]));
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值