判断点P是否在多边形中是计算几何中一个非常基本但是十分重要的算法。
判断方法也有好几种。
当你不确定多边形是否为凸多边形的时候采用射线法和转角法
1.射线法:
以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外,考虑沿着L从无穷远处开始自左向右移动,遇到和多边形的第一个交点的时候,进入到了多边形的内部,遇到第二个交点的时候,离开了多边形,……所以很容易看出当L和多边形的交点数目C是奇数的时候,P在多边形内,是偶数的话P在多边形外。
这种方法很难处理一种情况:
那就是交点正好在多边形的一个顶点或者多边形的一条正好在射线上时。
如图:
在此基础上提出了平移法,就是将射线平移:这里的平移不是真的平移了,而是改变了
交点的判断条件:每条线段,只要一份端点(高点)高于射线,另一端点(低点)恰在射线上或低于射线,且相交在P点的右侧(x轴的正方向)即可。
2.转角法:
如果P点在多边形内部的话,转角的代数和内部是2PI,对于外部总和是0.
对于已经知道是凸多边形的话,就很简单了,再做一次凸包(在原多边形的基础上判断叉积就可以了),只要不转角就说明在多边形内。