给定两个矩形,判断这两个矩形是否重叠。
注意,一个矩形可以用两个坐标表示,左上角和右下角。所以我们主要给出以下四个坐标。
l1 :第一个矩形的左上角坐标。
r1 :第一个矩形的右下角坐标。
l2 :第二个矩形的左上角坐标。
r2 :第二个矩形的右下角坐标。
我们需要编写一个函数bool doOverlap(l1, r1, l2, r2),如果两个给定的矩形重叠,则返回 true。
注意:可以假设矩形与坐标轴平行。
一种解决方案是逐个选取一个矩形的所有点,然后查看该点是否位于另一个矩形内。这可以使用以下文章讨论的算法来完成。
JavaScript 如何检查给定点是位于多边形内还是外:JavaScript 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)-CSDN博客
C# 如何检查给定点是位于多边形内还是外:C# 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)-CSDN博客
python 如何检查给定点是位于多边形内还是外:python 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)-CSDN博客
java 如何检查给定点是位于多边形内还是外:java 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)-CSDN博客
C++ 如何检查给定点是位于多边形内还是外:C++ 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)_c++判断一个点是否在多边形内部-CSDN博客
以下是一种更简单的方法。如果以下条件之一为真,则两个矩形不重叠。
1 ) 一个矩形位于另一个矩形的上边缘上方。
2 ) 一个矩形位于另一个矩形左边缘的左侧。我们需要检查上述情况以确定给定的矩形是否重叠。
以下是上述方法的实现:
public class RectangleOverlap {
static class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
// Returns true if two rectangles (l1, r1) and (l2, r2) overlap
static boolean doOverlap(Point l1, Point r1, Point l2, Point r2) {
// If one rectangle is to the left of the other
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;
}
public static void main(String[] args) {
Point l1 = new Point(0, 10);
Point r1 = new Point(10, 0);
Point l2 = new Point(5, 5);
Point r2 = new Point(15, 0);
if (doOverlap(l1, r1, l2, r2))
System.out.println("Rectangles Overlap");
else
System.out.println("Rectangles Don't Overlap");
}
}
输出:
Rectangles Overlap
由于代码没有任何循环或递归,因此上述代码的时间复杂度为 O(1)
辅助空间: O(1)