2015-05-04 90 views
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; 
} 
+1

向我们展示错误输出的示例。 –

+1

您可能还会发现,使用凸多边形的算法会失败,并且会出现凹多边形。 –

+1

您正在将双精度函数传递给定义为接受浮点数的函数,编译器应该提醒您。由vertex/verty描述的假定为正方形的图不是闭合路径。这可能会在你的惊人的复杂比较中给出不一致的答案。 – Erik

回答

1

你的多边形自相交。 (5,4)是“外部”是正常的

我认为你认为你的多边形是一个正方形,算法完全适用于自相交的多边形。

+0

非常好。也许你可以添加图片? – usr2564301