我有一个算法,可以判断一个点是否在多边形内。
int CGlEngineFunctions::PointInPoly(int npts, float *xp, float *yp, float x, float y)
{
int i, j, c = 0;
for (i = 0, j = npts-1; i < npts; j = i++) {
if ((((yp[i] <= y) && (y < yp[j])) ||
((yp[j] <= y) && (y < yp[i]))) &&
(x < (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
c = !c;
}
return c;
}
我唯一的问题是它假设了奇怪的绕组规则。我的意思是,如果多边形自相交,某些部分被认为是“空的”,将返回false。即使它自相交,我需要的是任何在多边形内部的东西都会返回true。
谢谢