繁体   English   中英

如何列出矩形联合中的所有点

[英]How to list all points in the union of rectangles

如果我们通过其左上角和右下角定义一个矩形(x1,y1), (x2,y2)并假设所有点都是整数值,我想列出多个矩形的并集中的所有点。

对于一个矩形,以下函数返回其中的所有点。

def findpoints(x1,y1,x2,y2):
    return [(x,y) for x in xrange(x1,x2+1) for y in xrange(y1,y2+1)]

我可以找到两个矩形联合中的所有点,

set(findpoints(x1,y1,x2,y2)) | set(findpoints(x3,y3,x4,y4))

但是我有很多矩形,这可能是非常低效的。 例如,假设所有矩形几乎相同。 有这么快的方法吗?

我同意StoryTeller,但我认为最好更详细地写一下,所以即使我们这些英语能力差的人也能理解

  1. 计算最小矩形,它是要测试的所有矩形的重叠区域

    • x1 = max(rec [i] .x1)
    • y1 = max(rec [i] .y1)
    • x2 = min(rec [i] .x2)
    • y2 = min(rec [i] .y2)
    • i = 0,...所有矩形-1
    • 如果x1> x2或y1> y2则所有矩形都不重叠,因此内部没有点
  2. 仅针对这个新矩形(x1,y1,x2,y2)测试所有点

    • 如果(x> = x1)和(x <= x2)和(y> = y1)和(y <= y2)那么点(x,y)在里面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM