确定方形单元格是否在多边形内部
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.多边形裁剪:
- 为正方形形成一个多边形。
- Find its intersection 所有单元格。
- Calculate area 个路口。
- 找到最大的交集。
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 的缺点是点位于多边形的边缘,这会花费更多的开销来检测。
例如,我希望多边形 #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.多边形裁剪:
- 为正方形形成一个多边形。
- Find its intersection 所有单元格。
- Calculate area 个路口。
- 找到最大的交集。
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 的缺点是点位于多边形的边缘,这会花费更多的开销来检测。