我有一条折线和一条线段。线段的端点之一始终也是折线的点。
示例: 线段:(1,2),(3,3) 折线:(3,3),(10,10),(15,30)
我想使用增强几何来确定线段和折线是否有交点。但是,它们在连接点相交是可以的。在这种情况下,为(3,3)。
在这种情况下, boost::geometry::intersects
将始终返回true
。我想对公共点做一个例外,但是如果在其他任何点有交集,仍然让它返回true
。有聪明的方法可以解决这个问题吗?还是我必须使用boost::geometry::intersection
并遍历结果?
答案 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;