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

时间:2013-11-12 14:42:25

标签: python performance computational-geometry

如果我们通过左上角和右下角定义一个矩形(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))

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

1 个答案:

答案 0 :(得分:1)

我同意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)测试所有点

    • if(x> = x1)和(x< = x2)和(y> = y1)和(y< = y2)然后点(x,y)在里面