我有两个矩形。我需要看看它们是否/在哪里重叠。
方法1: 1)单独考虑每个领域和范围。 2)使用类似于数学公式的公式:
x1 < a < x2
我在Python中写道:
if x1[0] > x2[0] and x1[0] < x2[1] or x1[1] > x2[0] and x1[1] < x2[1]: return True
问题: 这应该是检测任何一圈,它通过比较边界来做到这一点。但是它假设x1的边界点将在x2中。如果x1 [0],x1 [1]的边界虽然大于x2 [0] [1],那么它将返回false,这表示没有重叠,而实际上这两个点之间的间隔将是交叉。
方法2: 使用set()数据类型及其内置函数:
def containsRectangle(self,Rectangle):
x1 = range(self.x_interval[0],self.x_interval[1])
x2 = range(Rectangle.x_interval[0],Rectangle.x_interval[1])
set_x1 = set(x1)
set_x2 = set(x2)
if set_x1.intersection(x2):
return True
问题: 我必须使用浮点数,因为我需要精确计算。 Python不允许我迭代浮点数。
我都是出于想法的人。任何帮助将非常感谢伙伴!
答案 0 :(得分:1)
嗯,不,你的第二种方法是正确的。但是,在某种程度上,您必须在集合中具有离散值。如果您想要连续,那么比较交叉点的极值将会起作用,就像您在第一个例子中所做的那样。
确定2个矩形的交集是多边形后,您可以使用任何points inside polygon方法:
def point_inside_polygon(x,y,poly):
""" Assume poly is the intersection of the two rectangles and (x,y) is the point to check
"""
n = len(poly)
inside =False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
if p1x == p2x or x <= xinters:
inside = not inside
p1x,p1y = p2x,p2y
return inside