【发布时间】:2015-02-19 18:59:27
【问题描述】:
int pnpoly(int npol, float *xp, float *yp, float x, float y)
{
int i, j, c = 0;
for (i = 0, j = npol-1; i < npol; 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;
}
这个函数检查一个点是否在一个多边形内。如何处理负的多边形坐标?例如,
float x[3] = { 0.16, 1.2, -10 };
float y[3] = { 1.8, 10, -5.5 };
我尝试检查多边形内的一个有效点,它返回 0。
【问题讨论】:
-
你的测试点是什么(对于给定的例子)?此代码和该示例仅适用于查找测试点 (-8.0, -4.0) 和 (0, 6)。
-
没错,负坐标在这里似乎不是问题。你了解算法的工作原理吗?
-
浮点 x[3] = { -10, 0.17, 10 };浮动 y[3] = { -5.56, 1.85, 1.69 };测试点为 (2.5,-1.6) 返回 0。