给定两个矩形,判断这两个矩形是否重叠。
注意,一个矩形可以用两个坐标表示,左上角和右下角。所以我们主要给出以下四个坐标。
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)-优快云博客
C# 如何检查给定点是位于多边形内还是外:C# 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)-优快云博客
python 如何检查给定点是位于多边形内还是外:python 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)-优快云博客
java 如何检查给定点是位于多边形内还是外:java 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)-优快云博客
C++ 如何检查给定点是位于多边形内还是外:C++ 如何检查给定点是位于多边形内还是外(How to check if a given point lies inside or outside a polygon)_c++判断一个点是否在多边形内部-优快云博客
以下是一种更简单的方法。如果以下条件之一为真,则两个矩形不重叠。
1 ) 一个矩形位于另一个矩形的上边缘上方。
2 ) 一个矩形位于另一个矩形左边缘的左侧。我们需要检查上述情况以确定给定的矩形是否重叠。
以下是上述方法的实现:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def do_overlap(l1, r1, l2, r2):
# If one rectangle is to the left of the other
if l1.x > r2.x or l2.x > r1.x:
return False
# If one rectangle is above the other
if r1.y > l2.y or r2.y > l1.y:
return False
return True
# Driver code
if __name__ == "__main__":
l1 = Point(0, 10)
r1 = Point(10, 0)
l2 = Point(5, 5)
r2 = Point(15, 0)
if do_overlap(l1, r1, l2, r2):
print("Rectangles Overlap")
else:
print("Rectangles Don't Overlap")
输出:
Rectangles Overlap
由于代码没有任何循环或递归,因此上述代码的时间复杂度为 O(1)
辅助空间: O(1)