0
我有一个算法的C代码检查给定点是否在多边形内。它应该是正确的,我也继续在不同的地方看到这些代码。但是,当我使用它并不完美 - 约20%的答案是错误的。多边形中的点 - 错误算法
int pnpoly(int nvert, double *vertx, double *verty, double testx, double testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if (((verty[i]>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx[i]) * (testy-verty[i])/(verty[j]-verty[i]) + vertx[i]))
c = !c;
}
return c;
}
也许我的主要功能有问题。可能somone给我一个主要功能来检查这个algorthm?
这是我的主要功能
int main(){
double vertx[4] = {10, 10, 0, 0};
double verty[4] = {10, 0, 10, 0};
// for those two it returns "Inside"
double testx = 6;
double testy = 4;
/* for those two it returns "Outside"
double testx = 5;
double testy = 4;
*/
int result = pnpoly(4, vertx, verty, testx, testy);
if (result) {
printf("\nInside\n");
}
else {
printf("\nOutside\n");
}
return 0;
}
向我们展示错误输出的示例。 –
您可能还会发现,使用凸多边形的算法会失败,并且会出现凹多边形。 –
您正在将双精度函数传递给定义为接受浮点数的函数,编译器应该提醒您。由vertex/verty描述的假定为正方形的图不是闭合路径。这可能会在你的惊人的复杂比较中给出不一致的答案。 – Erik