在封闭的多边形中,需要判断一个点在不在图形中
先在点处画一条竖直的线穿过图形
这时候记下A上下两边焦点的个数分别为1,为单数
但是B上下两边焦点的个数分别为0和2,为双数
那么找一个有凹面的多边形呢
发现也一样
那么就用这个方法来实现,点是否在封闭图形中的判定(cocos2d实现方式)
bool PointInRegion(cocos2d::CCPoint pt,vector<cocos2d>::plist){int Cross=0;//依次判定每一条边的情况for(int i=0;i<plist.size(),i++){cocos2d:CCPoint p1;cocos2d:CCPoint p2;p1=plist[i];p2=plist[(i+1)%plist.size()];//看点的x坐标是不是在两点的x坐标之中if(pt.x=p2.x)contine;if(pt.x<min(p1.x,p2.x))contine;if(pt.x>min(p1.x,p2.x))contine;//一条垂直线穿过图形,看交点的y坐标double y = (double)(pt.x - p1.x) * (double)(p2.y - p1.y) / (double)(p2.x - p1.x) + p1.y; //统计在一边的交点的数量if(y>pt.y)nCross++;}//当一边的数量为偶数时候点在图形外if(nCross%2==0)return false;//当一边的数量为奇数时候点在图形内elsereturn true;}
原理图如下:
如果觉得《计算机图形学:传统函数方法判定点在不规则封闭区域内的判定方法》对你有帮助,请点赞、收藏,并留下你的观点哦!