点在多边形内的算法(C++和JavaScript版 )

来源:互联网 发布:带网络接口的av功放 编辑:程序博客网 时间:2024/05/16 09:06

C++,其中 npol是多边形顶点的数量,xp,yp是多边形顶点数组,x,y是某个点

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;    }


JavaScript,其中poly是多边形数组,pt是某个点

function _isInsidePolygon(pt, poly) {    for (var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)        ((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y))        && (pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)        && (c = !c);    return c;}


参考:

http://www.cnblogs.com/lichkingct/archive/2009/10/18/1585689.html

http://bbs.csdn.net/topics/240060193


0 0
原创粉丝点击