如果判断多边形点是否在凸多边形内则有多种方法,方法简单计算速度也快,直接使用物理引擎做判断多边形也行
但实际问题中遇到的多边形不一定是凸多边形,它可能是凹边行或者复合多边形
判断多边形一个点在多边形内或多边形外射线法是个不错的选择
射线法,判断多边形一点是否在多边形内或哆边形外只要从这点起,作一条射线例如,沿x向直到负无穷如果越过的边数是单数,这点就在多边形内越过的边数是偶数,这点僦在多边形外
注意到如果从P作水平向左的射线的话,如果P在多边形内部那么这条射线与多边形的交点必为奇数,如果P在多边形外部則交点个数必为偶数(0也在内)。所以我们可以顺序考虑多边形的每条边,求出交点的总个数还有一些特殊情况要考虑。假如考虑边(P1,P2)
1)如果射线正好穿过P1或者P2,那么这个交点会被算作2次,处理办法是如果P的从坐标与P1,P2中较小的纵坐标相同则直接忽略这种情况
2)如果射线水平,则射线要么与其无交点要么有无数个,这种情况也直接忽略
3)如果射线竖直,而P0的横坐标小于P1,P2的横坐标则必然相交。
4)再判断多边形楿交之前先判断多边形P是否在边(P1,P2)的上面,如果在则直接得出结论:P再多边形内部