最近在做一个带GIS地图的项目,关系到判断人是否在某个区域内的判断,写了一套算法供自己使用,也方便大家可以借鉴,如有更好的判断方法可与我一同交流,互相进步!
首先我们要明确一点,当一个点在一个多边形里面的时候,它向任意方向发送一条射线,与多边形相交的次数必定为奇数(当射线与多边形的某条边有重合部分时视作相交一次),当然,如果这个点在这个多边形的外面,那么相交的次数必定为偶数(包括0次)。
在理解了上面这个原理之后,就可以进行进一步的分析了,我们将这个多边形放置在一个坐标系中,然后,既然是任意方向的射线,那我们就约定从指定点发出的射线的方向为X轴的正方向,然后就可以开始判断相交次数了。
首先,将多边形分解成多条边分别进行计算,试想,当一个点的y在这条边的两个y值之间时,如果这个点在这条边的左边(亦或是在这条边上),那么从这条边发射的向x轴正方向的射线肯定与这条边有交点。
当y的大小介于y1和y2之间时,根据“相似三角形原理”,如果相交点为&