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

use*_*881 3 c++ algorithm math polygon

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

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

例如看下图:

点击查看图片

再举几个例子:

点击查看图片

Fum*_*idu 5

第 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的两端)。测试一个点是在多边形的外部还是内部是一个经典问题(有专门的维基百科页面)。


小智 -2

如果一条线段完全位于多边形内,则该线段的两侧至少有 1 个多边形顶点。请参阅如何判断点位于线的右侧还是左侧以查找点位于哪一侧。

更新: 但是,反之亦然。应从线段的一端开始按顺序遍历所有多边形顶点。从线段的起点到终点遍历时遇到的所有顶点都应该在一侧,其余的应该在另一侧。

如果线段与多边形的边之一重合,则上述情况将不成立。在这种情况下,线的一侧将没有顶点。然而,在这种情况下,该线也不完全位于多边形内部。

  • 这是完全错误的。1->4 呢?两边都有点,线段不完全在里面。您还可以在两侧都有点,其​​中一个线段完全位于外部。 (2认同)
  • 这仍然是错误的。您的内部可能有一个部分不满足您提到的要求。 (2认同)