网上判断的方法太多,我用的是 角度和判别法(适用于任意多边形)
角度和判别法就是判定点与多边形所有相邻顶点组成的角的角度和来判断点与多边形的位置关系。
如果点在多边形内部,只要该点不在边界线或者顶点上,则角度和为三百六十度。
<span style="white-space:pre"> </span>for (i = 0,j = N - 1;i < N;j = i++)
{
std::list<Point_2>::iterator pli(pl.begin());//pl是包含多边形每个顶点的list
advance(pli,i);
Point_2 pi = *pli;
std::list<Point_2>::iterator plj(pl.begin());
advance(plj,j);
Point_2 pj = *plj;
double x1,y1,x2,y2;
x1 = pi.hx() - p.hx();
y1 = pi.hy() - p.hy();
x2 = pj.hx() - p.hx();
y2 = pj.hy() - p.hy();
double radian = atan2(y1,x1) - atan2(y2,x2);
radian = abs(radian);
if (radian > M_PI) radian = 2* M_PI - radian;
angle += radian; // 计算角度和
//angle += angle2D(x1, y1, x2, y2);
}
if ( fabs(2* M_PI - angle) < 0.01 ){
inside = true;
return 1;
}