如何确定线段是否在多边形内?

时间:2015-03-16 13:46:34

标签: c++ algorithm math polygon

我们有一个线段 L 由两个点从多边形定义,多边形 P 由4个或更多点定义,我需要一个算法确定 L 是否在 P 内?

编辑:线段必须完全在多边形内部,如果只是部分它将被定义为外部。

例如,如下图所示:

click to view image

更多例子:

click to view image

2 个答案:

答案 0 :(得分:2)

第1步:L是否越过P的任何边缘?如果是,则L不在P内。如果否,请参阅步骤2

第2步:L的中间M在哪里?如果M在P内,则L在P内。

以防万一: http://en.wikipedia.org/wiki/Point_in_polygon

编辑,更多解释:有两种情况:

  • L穿过P的至少一个边缘。然后L至少部分地在P内。
  • L不穿过P的任何边缘。然后L在外面或内面。并且由于整个L在外部或内部,测试L的任何点的位置(L的两端除外)就足够了。测试一个点是在多边形之外还是在多边形内部是一个经典问题(有专门的维基百科页面)。

答案 1 :(得分:-2)

如果线段完全在多边形内部,则线的两侧将至少有一个多边形顶点。 请参阅How to tell whether a point is to the right or left side of a line以了解要点在哪一侧。

<强>更新 然而,反之亦然可能并非如此。应该从线段的一端开始按顺序遍历所有多边形顶点。从线段开始到结束遍历的所有顶点应位于一侧,其余顶点应位于另一侧。

如果线段与多边形的一个边缘重合,则上述情况不会成立。在这种情况下,线的一侧将没有顶点。但是,在这种情况下,线条也不完全位于多边形内部。