很常用的算法。此算法网上太多,大部分是抄来抄去的,光有代码,没什么解释;或者一堆解释,很深奥,不宜懂。
综上,正好项目中有一个需求,便花了点时间搞定了,趁着现在有时间,总结一下。
好了,有上面2张图就足够了。
求点是否在多边形内的算法,可以转换成,从当前点P(x',y')发射X轴方向射线(y轴中的值始终相等)与多边形的交点的个数,认真分析会找到与多边形交点个数为奇数就在多边形内,为偶数就在多边形外。
我们通过遍历多边形中的i和(i+1)中点构成的线段与 P(x',y')点的交点个数就可以了。
我们再简化一下,如图2所示,P(x',y')与P1(x1,y1),P2(x2,y2)的交点(x,y)有 θ1 = θ2,即 (y-y1)/(x-x1) = (y2-y1)/(x2-x1),这样就可以求出