问题
给定两个没有孔的非凸多边形,我想计算相应的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交点矩阵的最有效方法是什么?
答案 0 :(得分:1)
构建多边形线段的平面直线图(PSLG)(输出元素数量中的线性),将多边形转换为PSLG周期,确定这些周期所包围的面(基本上是深度优先搜索),然后其余的都是微不足道的。这里的难点在于计算PSLG,但有一些库。