2013-11-01 17 views
3

我试图让所有的x内,Y在C++中得到所有的x,y点任意多边形

对于如我有具有以下cordinates一个矩形,

任何多边形内1:

X = 5 
Y = 10 

点2:

X = 5 
Y = 8 

POIN吨3:

X = 9 
Y = 8 

点4:

X = 9 
Y = 10 

等等给出的4个点的多边形基座内的cordinates将

X = 6 Y = 9 
X = 7 Y = 9 
X = 8 Y = 9 

我发现这个从http://alienryderflex.com/polygon/

bool pointInPolygon() { 
    int i, j=polySides-1; 
    bool oddNodes=NO; 

    for (i=0; i<polySides; i++) { 
    if (polyY[i]<y && polyY[j]>=y 
     || polyY[j]<y && polyY[i]>=y) { 
     if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x) { 
      oddNodes=!oddNodes; }} 
     j=i; 
    } 
    return oddNodes; 
} 

甚至这个http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html

int pnpoly(int nvert, float *vertx, float *verty, float testx, float 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; 
} 

其实我大部分的搜索结果,我发现将有类似的代码的东西(如上图所示)。根据我的理解,如果点在多边形内并且不返回在多边形内找到的任何线,代码(如上所示)将只返回true/false。

+0

通过*任何*形状,你是否包括自相交多边形? – paddy

回答

1

如果你有一个函数bool pointInPolygon(polygon *pol, int point_x, int point_y),你可以这样做:

int x_min, x_max; // determines x min and max of your polygon 
int y_min, y_max; // determines y min and max of your polygon 
int i, j; 

... 

for(i = x_min; i < x_max; i++) { 
    for(j = y_min; j < y_max; j++) { 
    if(pointInPolygon(pol, i, j)) { 
     // add the point (i, j) in an array 
    } 
    } 
} 

它运作良好,而你的2D工作。

+0

感谢您的意见 – user2935569

4

在您的多边形上运行一个flood fill,并随着整数坐标记录所有点。

这适用于一般的多边形。

+0

感谢您的意见 – user2935569

相关问题