您需要澄清“内部顶点和边缘”的含义。让我们举一个非常普遍的案例,希望您能找到相关性。
光线投射(多边形中的点)算法射出一条光线,计算与 POLYGON 边的交点(奇数交点 = 内部,偶数 = 外部)。
因此,无论您是从不相交的梯形孔还是三角形孔(内边缘?)内部开始,或者即使多边形的一部分完全分离和/或自相交,它都能准确地给出正确的结果。
但是,您按什么顺序输入多边形的顶点,以便正确评估所有点?
虽然这是特定于代码的,但如果您使用的是计算与多边形边的每个交点的实现,那么这种方法将起作用 -
- 将主多边形分解为多边形组件。例如 - 梯形孔是一个多边形组件。
- 从 (0,0) 顶点开始(不管 (0,0) 是否真的位于你的多边形上),然后是第一个组件的顶点,在最后一个顶点之后重复它的第一个顶点。
- 包括另一个 (0,0) 顶点。
- 包括下一个组件,在最后一个顶点之后重复它的第一个顶点。
- 对每个组件重复上述两个步骤。
- 以最终 (0,0) 顶点结束。
2 个分量,例如,让两个分量的顶点分别为 (1x,1y)、(2x,2y)、(3x,3y) 和 (Ax,Ay)、(Bx,By)、(Cx,Cy)。其中 (Ax,Ay), (Bx,By), (Cx,Cy) 可以是不相交的三角形孔、相交的三角形或分离的三角形。
因此,在数学上等价于两个分量的奇异连续多边形的顶点是 -
(0,0),(1x,1y),(2x,2y),(3x,3y),(1x,1y),(0,0),(Ax,Ay),(Bx ,By),(Cx,Cy),(Ax,Ay),(0,0)
要了解它的工作原理,请尝试在便笺本上绘制这个数学上等效的多边形。-
1. 标记所有顶点,但不要加入它们。
2. 也分别标记重复的顶点。通过将它们标记为靠近原始点而不是在它们上来做到这一点。 (距离 e,其中 e->0(趋向/接近))(帮助可视化)
3. 现在以正确的顺序连接所有顶点(如上例所示)
您会注意到这形成了一个连续的多边形,并且仅在 e=0 限制处变得不相交。
您现在可以毫无问题地将这个数学等效多边形发送到您的光线投射函数(甚至可能是绕组数函数?)。