Boost几何:使用开区间的交叉点
Posted
技术标签:
【中文标题】Boost几何:使用开区间的交叉点【英文标题】:Boost geometry : intersection using an open interval 【发布时间】:2018-11-21 19:56:02 【问题描述】:我有一条折线和一条线段。线段的端点之一总是折线的一个点。
示例: 线段:(1,2),(3,3) 折线:(3,3),(10,10),(15,30)
我想使用boost几何来查找线段和折线是否有交点。但是,它们可以在连接点相交。在这种情况下,(3,3)。
boost::geometry::intersects
在这种情况下将始终返回 true
。我想为公共点做一个例外,但如果在任何其他点有交叉点,它仍然返回true
。有没有聪明的方法来解决这个问题?还是我必须使用boost::geometry::intersection
并迭代结果?
【问题讨论】:
【参考方案1】:如果我理解正确,您想检查线段是否与折线相交,而不是其连接点。
因此,您只需要检查没有与红色段共享端点的段(见图)。您可以跳过那些与红色段具有相同端点的那些,或者您可能希望以不同的方式处理它们,例如,检查整个段是否重合。
很久没接触c++所以写了伪代码:
foreach (segment in polyline)
if (
segment.A != redSegment.A &&
segment.A != redSegment.B &&
segment.B != redSegment.A &&
segment.B != redSegment.B &&
intersect (segment, redSegment)
)
return true;
return false;
【讨论】:
不幸的是,此解决方案将错过公共点的相邻折线段上的任何交点。 @user129186,我以为你想避免检测公共点的交叉点。但也许您想检查相邻线段是否与红色线段部分重合?以上是关于Boost几何:使用开区间的交叉点的主要内容,如果未能解决你的问题,请参考以下文章