给定一个由(白色)矩形和一组(黑色)矩形限制的二维空间占据该空间,我正在寻找一种方法来以某种方式索引空(白色)空间。为此,我想创建一组(白色)矩形,以便对于空间中的任何给定点(不属于任何“黑色”矩形的点),最大的空矩形存在于生成的一组白色矩形中。
谢谢
给定一个由(白色)矩形和一组(黑色)矩形限制的二维空间占据该空间,我正在寻找一种方法来以某种方式索引空(白色)空间。为此,我想创建一组(白色)矩形,以便对于空间中的任何给定点(不属于任何“黑色”矩形的点),最大的空矩形存在于生成的一组白色矩形中。
谢谢
您是在网格中(即图像)还是在连续的 2D 空间中?我的答案是针对每个点都有整数坐标的情况。在另一种情况下,您可以通过我的答案获得近似值。
如果我正确理解你的问题,你需要两件事:
为了计算列表,您可以使用算法 O(N),其中 N 是黑白图像中的像素数量。您可以在http://www.ulg.ac.be/telecom/rectangles找到描述这种算法的论文,其中包含一些(未优化的)C++ 源代码。在实践中,它非常快。
为了计算 pinters 的 2D 数组,您需要遍历所有最大空矩形的列表,并为每个空矩形更新所有包含像素的指针(如有必要)。由于最多有 N 个最大的空矩形(有关 prorof,请参阅http://www.ulg.ac.be/telecom/rectangles上链接的论文),并且每个矩形包含最多 N 个像素,这一步是最差的情况 O(N^2)。不知道能不能降低这一步的成本。
http://rd.springer.com/chapter/10.1007%2F3-540-53487-3_50 本文描述了一种有效的方法来解决我的问题。
问候, 达姆扬