【问题标题】:Boost geometry : intersection using an open intervalBoost几何:使用开区间的交叉点
【发布时间】: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 并迭代结果?

【问题讨论】:

    标签: c++ boost computational-geometry boost-geometry


    【解决方案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,我以为你想避免检测公共点的交叉点。但也许您想检查相邻线段是否与红色线段部分重合?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多