将许多矩形组合成更少的矩形

时间:2013-07-16 04:04:46

标签: c# java compression collision-detection

我想将许多不重叠的矩形压缩成较大的矩形。当它们相邻时。

我当前算法的伪代码:

do
   compress horizontally using sweep and prune
   compress horizontal output vertically using sweep and prune
while (this output is small than previous output)

这是link to sweep and prune

这很好用,但我想知道是否有方法可以减少矩形输出。我认为这比我现在做的更复杂。

1 个答案:

答案 0 :(得分:4)

所以听起来你的问题是你在矩形之间留有小间隙,阻止它们被收集在一起。如果您可以访问sweep和prune方法的源代码,则可以在“重叠”测试中添加缓冲区,但我认为考虑使用R-Tree会更优化。这将对矩形空间进行索引,而不会影响间隙等限制。

R-Tree Wiki

这是Sellis等人的相关论文。人。描述R +树:

http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=50ECCC47148D9121A4B39EC1220D9FB2?doi=10.1.1.45.3272&rep=rep1&type=pdf

这是R-Tree的C#实现

http://sourceforge.net/projects/cspatialindexrt/

[编辑 - 评论1后]

那么让我看看能否捕捉到当前的问题。

  • 矩形在水平/垂直邻接测试的过程中连接。
  • 如果两者的相邻边界相等,则仅连接矩形。
  • 任何连接的中间结果也必须形成有效的矩形。
  • 结果是非最佳的,因为加入的顺序。

我认为你实际上是在寻找直线多边形矩形的最小解剖。第一步是将所有触摸矩形连接在一起,无论它们是否形成矩形。我认为你正陷入过程中每个步骤的中间阶段的问题,也需要完整的矩形解构,导致次优结果。如果将它们合并为一个直线多边形,则可以使用图形理论机制。

Minimum Dissection into Rectangles of a Rectilinear Polygon

您可以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