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

Determine if square cell is inside polygon

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

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

如果我没记错的话,这是 Fortune's algorithm in JavaScript, that takes a set of 2-d points (called sites) and returns a structure containing data for a Voronoi diagram computed for this points. It returns polygons in a list called cells. It seems to use Euclidean distance as measurement. If it's true we know that polygons are always convex (see Formal definition section in Voronoi wiki page) 的一个实现。

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

1.多边形裁剪

  1. 为正方形形成一个多边形。
  2. Find its intersection 所有单元格。
  3. Calculate area 个路口。
  4. 找到最大的交集。

2- 多边形中的点

您也可以简单地找到正方形中心位于其中的单元格。 Ray casting is a robust PIP algorithm. Although there's a simpler approach for convex polygons (see Convex Polygons section here).

3。点之间的距离

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


例外情况:

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

  • 第二个和第三个非常相似,但 PIP 的缺点是点位于多边形的边缘,这会花费更多的开销来检测。