确定方形单元格是否在多边形内

时间:2016-07-21 00:06:17

标签: geometry polygon voronoi point-in-polygon

enter image description here

例如,我希望多边形#14内部或部分内部的网格单元格(正方形)与#14相关联。是否有算法可以有效地计算方形是否在多边形内?

我有构成多边形的边的坐标。

1 个答案:

答案 0 :(得分:2)

如果我做对了,这是JavaScript中Fortune's algorithm的实现,它采用一组2-d点(称为sites)并返回包含{{3}数据的结构为这点积算。它在名为cells的列表中返回多边形。似乎使用Voronoi diagram作为衡量标准。如果确实如此,我们知道多边形总是凸的(参见Euclidean distance中的形式定义部分)。

现在,这些是解决这个问题的选择(很难简单):

<强> 1。多边形剪辑:

  1. 为正方形形成一个多边形。
  2. Voronoi wiki page包含所有细胞。
  3. Find its intersection这个十字路口。
  4. 找到最大的十字路口。
  5. 多边形中的2点

    您还可以简单地找到正方形中心位于其中的单元格。 Calculate area是一种强大的PIP算法。虽然凸多边形有一种更简单的方法(参见凸多边形部分Ray casting)。

    第3。积分之间的距离

    如果您知道与site相关联的cell,那么您只需要计算所有sites的正方形中心之间的距离。无论你使用here来计算Voronoi,正方形的中心点位于cell内,它的相关site的距离最小,因为这实际上是划分Voronoi图中的平面。

    <强>例外:

    • 第一种方法计算成本高,但最准确。在大多数情况下,第二和第三选项都可以正常工作,但是,有些例外情况是他们无法正确决定:

    distance measurement

    • 第二个和第三个非常相似,但PIP的缺点是点位于多边形边缘的情况下,需要花费更多的检测开销。