C++ 判断两个矩形是否重叠(Find if two rectangles overlap)

给定两个矩形,判断这两个矩形是否重叠。
注意,一个矩形可以用两个坐标表示,左上角和右下角。所以我们主要给出以下四个坐标。
l1 :第一个矩形的左上角坐标。
r1 :第一个矩形的右下角坐标。
l2 :第二个矩形的左上角坐标。
r2 :第二个矩形的右下角坐标。

我们需要编写一个函数bool doOverlap(l1, r1, l2, r2),如果两个给定的矩形重叠,则返回 true。

注意:可以假设矩形与坐标轴平行。
一种解决方案是逐个选取一个矩形的所有点,然后查看该点是否位于另一个矩形内。这可以使用以下文章讨论的算法来完成。

JavaScript 如何检查给定点是位于多边形内还是外:https://blog.youkuaiyun.com/hefeng_aspnet/article/details/145142710
C# 如何检查给定点是位于多边形内还是外:https://blog.youkuaiyun.com/hefeng_aspnet/article/details/145142687
python 如何检查给定点是位于多边形内还是外:https://blog.youkuaiyun.com/hefeng_aspnet/article/details/145142662
java 如何检查给定点是位于多边形内还是外:https://blog.youkuaiyun.com/hefeng_aspnet/article/details/145142632
C++ 如何检查给定点是位于多边形内还是外:https://blog.youkuaiyun.com/hefeng_aspnet/article/details/145142452

以下是一种更简单的方法。如果以下条件之一为真,则两个矩形不重叠。

1 ) 一个矩形位于另一个矩形的上边缘上方。

2 ) 一个矩形位于另一个矩形左边缘的左侧。我们需要检查上述情况以确定给定的矩形是否重叠。

以下是上述方法的实现:

// CPP program for the above approach

#include <bits/stdc++.h>

struct Point {
    int x, y;
};

// Returns true if two rectangles (l1, r1) and (l2, r2)
// overlap
bool doOverlap(Point l1, Point r1, Point l2, Point r2)
{

   if (l1.x > r2.x || l2.x > r1.x)
        return false;

    // If one rectangle is above the other
    if (r1.y > l2.y || r2.y > l1.y)
        return false;

    return true;
}

/* Driver program to test above function */
int main()
{
    Point l1 = { 0, 10 }, r1 = { 10, 0 };

    Point l2 = { 5, 5 }, r2 = { 15, 0 };

    if (doOverlap(l1, r1, l2, r2))

        printf("Rectangles Overlap");

    else

        printf("Rectangles Don't Overlap");

    return 0;
}

输出:

Rectangles Overlap

由于代码没有任何循环或递归,因此上述代码的时间复杂度为 O(1)

辅助空间: O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值