我正在尝试在Julia中实施Fortune的算法,以找到随机点数组的Voronoi多边形,但是我真的在海滩线上挣扎。
我知道海滩线是几个抛物线的结合。每个抛物线的焦点都是数组中的一个点,因此彼此相邻的抛物线的交点会在两个Voronoi区域之间发出“边缘”。 阵列中的每个点都是进入海滩线的事件,但是也会有一个称为“圆点”的东西,对应于穿过三个“真实点”的圆的极点(在这种情况下为最低点) ,而实际点是随机点数组中的点。
我知道如何与抛物线相交,我也知道,当海滩线经过一个实点时,它的抛物线将是一条与先前点的抛物线相交的线,并且相交点很容易找到。
您如何存储沙滩线?您只是在进行计算相邻抛物线的每个相交的事件时存储相交点吗?
我正在阅读Mark de Berg的计算几何算法和应用程序,但是我的母语不是英语,所以我很难理解一些东西。
如果能在此方面为我提供帮助,那就太好了。
答案 0 :(得分:0)
在决定如何表示沙滩线时,重要的考虑因素是您在算法过程中处理的每个“事件”必须仅对其进行 local 修改。如果扫掠线稍微移动了一点,但没有越过任何事件,那么您无需更改泳滩线的表示。
因此,沙滩线数据结构不应包含沙滩线上的任何实际点!
找到要在O(log N)时间内修改的零件也很重要。
最简单的表示法只是一个二进制搜索树,其中包含按顺序向抛物线贡献抛物线的输入点。然后,在每个事件期间进行的修改都包括添加或删除单个点。