按多边形选择网格单元格

时间:2015-03-27 06:36:34

标签: python python-2.7 math

对于我建造的小型项目,我有以下情况: 我有一个(矩形)网格,例如网格单元格的边界: x = 50 * nx with:0< = nx< = 100

和y = 100 * ny -50 <= ny <= 50

因此,单元中心(因为它是一个矩形网格)可以在以下位置找到: xc = 25 + 50 * nxc(其中:0 <= nxc <= 99) xc = 50 + 100 * nyc(使用:-50&lt; = nyc&lt; = 49)

(nx,ny,nxc,nyc是当前的整数)

拥有这个网格我希望能够&#34;绘制&#34;多边形并选择此多边形内的所有单元格(或单元格中心)。如何处理这个?

示例多边形是

Example grid: x axis (0, 200, 400, etc.) y axis (0, 500, 100, 1500, etc)

x     y
400   -200
1000  2500
2000  1500
1800  -300
1000  -100
500   -2000

绘制的形状(多边形)只是一个示例,它可以是任何形状。但是,定义形状的多边形没有相互交叉的线条。

(矩形)网格也可以是任意大小,但网格边界及其单元中心的位置是已知的。

那么如何确定多边形内的单元格(或单元格中心)?

1 个答案:

答案 0 :(得分:1)

维基百科提供了一个很好的技巧来决定一个点是在多边形的内部还是外部。 http://en.wikipedia.org/wiki/Point_in_polygon

基本上选择穿过感兴趣的单元格中的点的任意线来计算它与多边形的交叉点数。偶数 - &gt;外面,奇数 - &gt;内。由于所有多边形段都是已知的,因此这将是微不足道的。注意,如果与方程有数学交集,请确保交点实际上在段上。如果(a1,b1)(a2,b2)表示段,而(x,y)表示交点,请确保x在a1和a2之间,y在b1和b2之间。

也就是说,要确定单元格是否在多边形内,您需要将其所有4个角都放在多边形中,否则单元格部分或全部位于多边形之外。

编辑:

为了使答案更加完整以覆盖下面的凹形情况,其中所有四个角都在多边形中,但不是所有的细胞体都是。
enter image description here 检查凹度的一种方法是,而不是任意一行,选择单元格的四边以查看四边中的任何一边是否有&gt; = 2个交点。如果是,它可能是一个凹凸的标志,然后它真的取决于你对内部或外部的定义。