我想将许多不重叠的矩形压缩成较大的矩形。当它们相邻时。
我当前算法的伪代码:
do
compress horizontally using sweep and prune
compress horizontal output vertically using sweep and prune
while (this output is small than previous output)
这很好用,但我想知道是否有方法可以减少矩形输出。我认为这比我现在做的更复杂。
答案 0 :(得分:4)
所以听起来你的问题是你在矩形之间留有小间隙,阻止它们被收集在一起。如果您可以访问sweep和prune方法的源代码,则可以在“重叠”测试中添加缓冲区,但我认为考虑使用R-Tree会更优化。这将对矩形空间进行索引,而不会影响间隙等限制。
这是Sellis等人的相关论文。人。描述R +树:
这是R-Tree的C#实现
http://sourceforge.net/projects/cspatialindexrt/
[编辑 - 评论1后]
那么让我看看能否捕捉到当前的问题。
我认为你实际上是在寻找直线多边形矩形的最小解剖。第一步是将所有触摸矩形连接在一起,无论它们是否形成矩形。我认为你正陷入过程中每个步骤的中间阶段的问题,也需要完整的矩形解构,导致次优结果。如果将它们合并为一个直线多边形,则可以使用图形理论机制。
您可以Graph-Theoretic Solutions to Computational Geometry Problems
查看David Eppstein或Algorithm for finding the fewest rectangles to cover a set of rectangles without overlapping
调查Gareth Rees