计算机图形学:传统函数方法判定点在不规则封闭区域内的判定方法

在封闭的多边形中,需要判断一个点在不在图形中

先在点处画一条竖直的线穿过图形

计算机图形学:传统函数方法判定点在不规则封闭区域内的判定方法_第1张图片

这时候记下A上下两边焦点的个数分别为1,为单数

但是B上下两边焦点的个数分别为0和2,为双数

那么找一个有凹面的多边形呢

计算机图形学:传统函数方法判定点在不规则封闭区域内的判定方法_第2张图片

 发现也一样

那么就用这个方法来实现,点是否在封闭图形中的判定(cocos2d实现方式)

bool PointInRegion(cocos2d::CCPoint pt,vector::plist)
{
	int Cross=0;
	
    //依次判定每一条边的情况
	for(int i=0;imin(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;
        //当一边的数量为奇数时候点在图形内
	else
		return true;
	
}

原理图如下:

计算机图形学:传统函数方法判定点在不规则封闭区域内的判定方法_第3张图片

你可能感兴趣的:(c++,图形渲染)