我正在使用Boost几何,并且尝试从相交的折线(Boost几何中的线串2d)计算一个“有界”多边形(请参见下图)。当前,我的方法是i)获取这些线之间的所有交点,然后ii)在交点处“分割”每条线。但是,此算法有点穷举。有谁知道增强几何是否对此有更高的效率?
此外,我如何获取位于两个相交点处的每个线串的线段(或点的向量)?例如,对于绿色的线串,如果我有两个红色的交点,如何得到这两个点之间的线串(包含两个红色的交点和两个内部的蓝色点的点的向量)?增强几何中是否有类似“分裂”的功能?
任何建议都值得赞赏。提前谢谢。
答案 0 :(得分:2)
根据给定的描述,似乎(多)线成对相交以形成单个回路,因此内部多边形定义良好。如果不正确,则解决方案不是唯一的。
由于线的数量很少,因此详尽搜索成对相交不会是一个大麻烦。对于5条(多义)线,有10对尝试,而您预期有5个交叉点。从相交处形成环路并不是什么大问题。
最重要的是,Boost Geometry是否使用有效的算法与折线相交。不确定是否已记录在案。对于中等数量的顶点(例如低于100个),这并不是很重要。
如果点的数量确实很大,则可以诉诸有效的线段交点算法,该算法将复杂度从O(n²+ k)降低到O((n + k)log n)。参见https://en.wikipedia.org/wiki/Bentley%E2%80%93Ottmann_algorithm。您可以一次处理所有折线。
如果折线具有特定的属性,则可以利用它们来简化任务。