增强几何形状:使用开放间隔的交集

时间:2018-11-21 19:56:03

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

我有一条折线和一条线段。线段的端点之一始终也是折线的点。

示例: 线段:(1,2),(3,3) 折线:(3,3),(10,10),(15,30)

我想使用增强几何来确定线段和折线是否有交点。但是,它们在连接点相交是可以的。在这种情况下,为(3,3)。

在这种情况下,

boost::geometry::intersects将始终返回true。我想对公共点做一个例外,但是如果在其他任何点有交集,仍然让它返回true。有聪明的方法可以解决这个问题吗?还是我必须使用boost::geometry::intersection并遍历结果?

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您想检查线段是否在其连接点以外的点与折线相交。

因此,您只需要检查没有共享端点的段和红色段(请参见图片)。您可以跳过那些具有相同终点的红色分段的用户,或者您可能希望以其他方式处理它们,例如,检查整个分段是否重合。

我很长时间没有使用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;

enter image description here