Boost 从相交的线串计算有界多边形

Boost 从相交的线串计算有界多边形,boost,computational-geometry,boost-geometry,Boost,Computational Geometry,Boost Geometry,我正在使用boost geometry,并尝试从相交多段线(boost geometry中的二维线串)计算“有界”多边形(请参见下图)。目前,我的方法是i)获取这些线之间的所有交点,然后ii)“分割”交点处的每条线。然而,这个算法有点穷尽。有人知道boost geometry是否有更有效的解决方案吗 此外,如何获得位于两个交点内的每个线串的线段(或点向量)?例如,对于绿色线串,如果有两个红色交点,如何获取这两个点之间的线串(包含两个红色交点和两个内部蓝色点的点向量)?在boost geomet

我正在使用boost geometry,并尝试从相交多段线(boost geometry中的二维线串)计算“有界”多边形(请参见下图)。目前,我的方法是i)获取这些线之间的所有交点,然后ii)“分割”交点处的每条线。然而,这个算法有点穷尽。有人知道boost geometry是否有更有效的解决方案吗

此外,如何获得位于两个交点内的每个线串的线段(或点向量)?例如,对于绿色线串,如果有两个红色交点,如何获取这两个点之间的线串(包含两个红色交点和两个内部蓝色点的点向量)?在boost geometry中是否有任何类似“拆分”的功能


任何建议都将不胜感激。提前感谢。

根据给定的描述,(多边形)线似乎成对相交以形成单个循环,因此内部多边形定义良好。如果不是这样,则解决方案不是唯一的

由于线的数量很小,彻底搜索两两相交不会是一个大问题。对于5条(多边形)线,需要尝试10对线,而您需要5个交点。从交叉口形成环路不是什么大事

最重要的是Boost Geometry是否使用有效的算法相交多段线。不确定是否有记录。对于中等数量的顶点(例如低于100个),这并不重要

如果点的数量确实很大,您可以求助于有效的线段相交算法,该算法将复杂性从O(n²+k)降低到O((n+k)logn)。看见可以一次性处理所有多段线


如果您的多段线具有特定的特性,则可以利用它们来简化任务。

根据给定的描述,(多边形)线似乎成对相交以形成单个循环,因此内部多边形定义良好。如果不是这样,则解决方案不是唯一的

由于线的数量很小,彻底搜索两两相交不会是一个大问题。对于5条(多边形)线,需要尝试10对线,而您需要5个交点。从交叉口形成环路不是什么大事

最重要的是Boost Geometry是否使用有效的算法相交多段线。不确定是否有记录。对于中等数量的顶点(例如低于100个),这并不重要

如果点的数量确实很大,您可以求助于有效的线段相交算法,该算法将复杂性从O(n²+k)降低到O((n+k)logn)。看见可以一次性处理所有多段线


如果您的多段线具有特定属性,可以利用它们来简化任务。

您是否将多段线与方形网格相交?您好,非常感谢您的评论。交点可以位于多段线和直线之间。对于给定的一组多段线或直线,我想计算上图所示的边界多边形。对于给定的示例,我们有3条线和一条多段线。它可以位于两条多段线之间吗?同时有多少条直线/多段线?是的,它还必须处理两条多段线的情况。例如,它可以是两条多段线之间的闭合区域,每条多段线表示一个半圆。但是,多段线的数量可以是任意的,只要它们可以包围/形成一个边界多边形。我不认为你想要的是一个“边界”多边形。而是一个“有界”多边形。你是将多段线与正方形网格相交吗?嗨,非常感谢你的评论。交点可以位于多段线和直线之间。对于给定的一组多段线或直线,我想计算上图所示的边界多边形。对于给定的示例,我们有3条线和一条多段线。它可以位于两条多段线之间吗?同时有多少条直线/多段线?是的,它还必须处理两条多段线的情况。例如,它可以是两条多段线之间的闭合区域,每条多段线表示一个半圆。但是,多段线的数量可以是任意的,只要它们可以包围/形成一个边界多边形。我不认为你想要的是一个“边界”多边形。而是一个“有界”多边形。嗨,伊夫,非常感谢你的宝贵意见。多段线确实成对相交。正如您正确指出的,我问题的第一部分与boost geometry是否有更有效的算法返回给定多段线集的所有交点有关(例如扫掠等)。问题的第二部分是关于给定计算的交点,如何获得形成有界多边形边的(其余)多段线点?例如,在我的第一篇文章中;对于绿线,如何获得交点之间的蓝色点?@GioR:您需要知道交点属于哪些线段(即端点索引沿多段线),以某种方式。然后切割有用的部分并合并片段以生成单个轮廓是一件简单的事情。嗨,Yves,非常感谢您的宝贵意见。多段线确实成对相交。正如您正确指出的,我问题的第一部分与boost geometry是否有更有效的算法返回给定多段线集的所有交点有关(例如扫掠等)。问题的第二部分是关于给定计算的交点,如何获得形成有界多边形边的(其余)多段线点?例如,在我的第一篇文章中;对于绿线,如何获得交点之间的蓝色点?@GioR:您需要知道交点属于哪些线段(即端点索引沿多段线),以某种方式。然后切割有用的部分并合并片段以生成单个大纲