【发布时间】:2010-09-20 09:35:48
【问题描述】:
我会去哪里寻找将 0 或 1 的二维网格值作为输入的算法,然后识别其中所有可能的非重叠矩形?
在更实际的解释中:我正在绘制一个由许多正方形表示的网格,并且我希望找到一种方法将尽可能多的相邻正方形组合成矩形,以减少花费的时间循环穿过每个方块并绘制它。
不需要最高效率,速度更重要。
附录:显然我正在寻找的似乎是一种称为 Tesselation 的技术。现在我只需要为这个具体案例找到一个好的描述。
附录2:“1”方格的边界将是不规则的,在某些情况下甚至没有连接,因为“1”方格的分布将是完全随机的。我需要识别这些不规则的形状并将其分割成规则的矩形。
正确答案:为了在速度和效率之间取得最佳平衡,最好使用网格数据填充四叉树,每个节点的状态值为空/部分填充/填满。
【问题讨论】:
-
"不需要最高效率,速度更重要。" - 嗯?我假设您的意思是“我不想要绝对最小数量的矩形,只想要快速近似的东西”......?
-
哦,你有没有证明循环通过每个方格是你的性能瓶颈?
-
关于近似值,是的。就效率与速度而言,我基本上是在寻找最平衡的解决方案。另外,是的,我 100% 确定循环是瓶颈,因为 Perl 比 OpenGL 本身慢很多。
-
您的数据是静态的吗? IE。值得缓存吗?
-
根据使用情况,它大约每 3-30 分钟变化一次。实际上,该算法将在创建另一个缓存期间应用。最终目标是在 3D 渲染期间获得一个用于遮挡检查的边界框。
标签: geometry 2d area rectangles