计算两个多边形之间的9个交集矩阵

Calculate 9 Intersection Matrix between two polygons

问题

给定两个没有孔的非凸多边形,我想计算对应的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维的,一条线是一维的,一个多边形是二维的,我想知道交集的最高维数。


到目前为止我有什么

好的,所以有一些算法,例如 Vatti 裁剪算法,可以将一个多边形裁剪到另一个多边形。这意味着这些算法提供了交集几何对象,它可能是对象的集合。有了这个结果,我相信9交矩阵是可以推导出来的,虽然我还没有真正想清楚。

此方法的一个问题是裁剪算法的二次复杂度,因为此算法将包含在 GIS 中以实现高效的拓扑查询回答。

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

不过,我也相信这种做法会导致非常多的条件。到目前为止,我有以下一组条件:

问题是这套规则还不完整。例如,对于边界相交于至少一个多边形的角点的情况,我仍然没有好的规则。

实际问题

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

构建多边形线段的平面直线图(PSLG)(输出元素数量呈线性关系),将多边形转换为 PSLG 循环,确定这些循环所包围的面(深度优先搜索,基本上),然后剩下的就有些微不足道了。这里最困难的部分是计算 PSLG,但是有相关的库。