我想检查给定点是否位于多边形内。
我已经使用光线投射研究了多边形方法中的点,但我不确定在给定多边形不相交的情况下它将如何工作。例如,如果多边形的中心有一个“洞”。在这种情况下如何使用此功能?
1 回答
我在这里回答了一个类似的问题,尽管我不清楚我是否太了解 OP 的问题。好吧,又来了——
让我们举一个非常普遍的例子。带孔和交叉点的多边形
光线投射(多边形中的点)算法射出一条光线,计算与 POLYGON 侧面的交点(奇数交点 = 内部,偶数 = 外部)。
因此,无论您是从不相交的梯形孔还是三角形孔(内边缘?)内部开始,或者即使多边形的一部分完全分离和/或自相交,它都能准确地给出正确的结果。
但是,您以什么顺序输入多边形的顶点,以便正确评估所有点?
虽然这是特定于代码的,但如果您使用的是计算与多边形边的每个交点的实现,那么这种方法将起作用 -
将主多边形分解为多边形组件。例如 - 梯形孔是一个多边形组件。
- 从 (0,0) 顶点开始(与 (0,0) 实际位于多边形的位置无关),然后是第一个组件的顶点,在最后一个顶点之后重复其第一个顶点。
- 包括另一个 (0,0) 顶点。
- 包括下一个组件,在最后一个顶点之后重复它的第一个顶点。
- 对每个组件重复上述两个步骤。
- 以最终 (0,0) 顶点结束。
示例 -
让我们拍摄右边的照片,带孔的外壳并应用上述方法。在数学上等效于 2 个分量(多边形+孔)的奇异连续多边形的顶点是 -
(外部)-----(内部孔)
0、1、2、3、4、5、1, 0,1,2,3,4,1,0
要了解它是如何工作的,请尝试在便签本上绘制这个数学上等效的多边形。-
1. 标记所有顶点,但不要连接它们。
2. 也分别标记重复的顶点。通过将它们标记为靠近原始点而不是在它们上来做到这一点。(在距离 e 处,其中 e->0(趋向/接近))(以帮助可视化)
3. 现在以正确的顺序连接所有顶点(如上例所示)您会注意到这形成了一个连续的多边形并且仅在 e=0 限制处变得不相交。
您现在可以毫无问题地将这个数学上等效的多边形发送到您的光线投射函数(甚至可能是绕组数函数?)。