计算两个多边形

时间:2015-09-17 16:28:41

标签: algorithm gis computational-geometry

问题

给定两个没有孔的非凸多边形,我想计算相应的9个交点矩阵。

9交叉矩阵的形式为:

  |   I   |   B   |   E
I | I ∩ I | I ∩ B | I ∩ E
B | B ∩ I | B ∩ B | B ∩ E
E | E ∩ I | E ∩ B | E ∩ E

I - Interior 
B - Border
E - Exterior

在矩阵的每个单元格中,我有兴趣知道交叉是否存在,如果它存在,我想知道它是点,线还是多边形。

值得注意的是,对于给定的单元格,多边形之间的交点可以由一组几何构成。但是,如果集合由点和线组成,我只对了解线路感兴趣。在这个逻辑中,点具有最低优先级,多边形最高。

因此,如果我们认为一个点是0维,1维线和2维多边形,我想知道交点的最高维度。


到目前为止我所拥有的

好的,所以有一些算法,比如Vatti裁剪算法,将多边形剪辑到另一个。这意味着这些算法提供交叉几何对象,其可以是对象的集合。得到这个结果后,我相信有可能推导出9交叉矩阵,即使我还没有真正想过它。

这种方法的一个问题是削波算法的二次复杂性,因为该算法将包含在GIS中,以便进行有效的拓扑查询回答。

我确实相信可以仅使用边界之间的交叉来填充矩阵,可以在O(Nlog(N)+ k)中计算,其中K是使用Balaban提出的算法的交叉点的数量,以及简单的点位置。

但是,我也相信这种方法会带来很大的条件。到目前为止,我有以下条件:

  • 外部之间的交叉总是二维的
  • 如果两个多边形的边界在不是拐角的点相交,则内部的交点是二维的
  • 如果边框不相交并且另一个中包含多边形的至少一个点,则第一个包含在第二个中(并且可以填充许多矩阵单元格)
  • 如果边框不相交且多边形的至少一个点位于另一个之外,则多边形不相交(并且所有矩阵单元都可以填充)

问题是这套规则到目前为止还不完整。例如,对于边框在一个点上相交的情况,我仍然没有一个好的规则,该点也是至少一个多边形的一个角。

实际问题

给定两个没有孔的非凸多边形或自相交,计算与两个几何对象相关的9交点矩阵的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

构建多边形线段的平面直线图(PSLG)(输出元素数量中的线性),将多边形转换为PSLG周期,确定这些周期所包围的面(基本上是深度优先搜索),然后其余的都是微不足道的。这里的难点在于计算PSLG,但有一些库。