财富算法中包含什么内容?

时间:2019-05-27 12:06:37

标签: algorithm julia computational-geometry voronoi

我正在尝试在Julia中实施Fortune的算法,以找到随机点数组的Voronoi多边形,但是我真的在海滩线上挣扎。

我知道海滩线是几个抛物线的结合。每个抛物线的焦点都是数组中的一个点,因此彼此相邻的抛物线的交点会在两个Voronoi区域之间发出“边缘”。 阵列中的每个点都是进入海滩线的事件,但是也会有一个称为“圆点”的东西,对应于穿过三个“真实点”的圆的极点(在这种情况下为最低点) ,而实际点是随机点数组中的点。

我知道如何与抛物线相交,我也知道,当海滩线经过一个实点时,它的抛物线将是一条与先前点的抛物线相交的线,并且相交点很容易找到。

您如何存储沙滩线?您只是在进行计算相邻抛物线的每个相交的事件时存储相交点吗?

我正在阅读Mark de Berg的计算几何算法和应用程序,但是我的母语不是英语,所以我很难理解一些东西。

如果能在此方面为我提供帮助,那就太好了。

1 个答案:

答案 0 :(得分:0)

在决定如何表示沙滩线时,重要的考虑因素是您在算法过程中处理的每个“事件”必须仅对其进行 local 修改。如果扫掠线稍微移动了一点,但没有越过任何事件,那么您无需更改泳滩线的表示。

因此,沙滩线数据结构不应包含沙滩线上的任何实际点!

找到要在O(log N)时间内修改的零件也很重要。

最简单的表示法只是一个二进制搜索树,其中包含按顺序向抛物线贡献抛物线的输入点。然后,在每个事件期间进行的修改都包括添加或删除单个点。