Voronoi图(三):构造Voronoi图

探讨平面扫描策略在Voronoi图构造中的困境,并引入Fortune算法,通过以曲代直的方法巧妙规避回退困境,实现Voronoi图的优雅构造。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


招募告示:想做一个苏菲2炼金的网站,用于计算最优/次优合成图,涉及算法、Web开发、UI/UX等等,有兴趣请私我哒~

1. 平面扫描策略的困境

对于Voronoi的构造,我们究竟使用什么策略比较合适呢?针对这个问题,大家可以结合之前我们讲解的算法策略来分析一下呢。如果你之前看过笔者所著的其他计算几何算法详解,你应该对下面这些算法策略感到无比亲切:

  • 平面扫描策略(Plane Sweep),比如几何求交,三角拆分
  • 随机增量策略(Randomized Incremental Algorithm),比如点定位

其中,平面扫描策略是我们介绍最多的算法,那么我们是否能应用平面扫描策略来解决Voronoi图的构造问题,以达到简化问题的目的呢?为了回答这个问题,我们先来看看之前平面扫描策略的一个比较重要的特性:

扫描线将平面分割成两个部分:1)固定部分;2)待处理部分;也就是说,待处理部分不会对已固定部分产生任何的影响。

这是什么意思呢?以之前三角拆分中的单调多边形拆分为例,只要是水平扫描线扫过的部分,单调多边形的拆分已经完全固定,即使扫描到后面的顶点也不会对其产生任何的变化,比如下面这个例子:

在这里插入图片描述

大家可以看到,只要是水平扫描线扫过并处理过的部分,就会被固定下来,之后不会再有任何变化。比如扫描线扫到顶点0,这意味着上面的多边形部分的拆分已经全部完全,不会再改变,即使我们继续向下扫描。比方说接下来扫描顶点13,它不会对上图中的灰色固定区域有任何的影响。这个性质非常的重要,因为它保证了算法的简洁性,也就是保证了算法不会有回退的情况。大家可以想象一下,如果需要回退到之前已经处理过的顶点,单调多边形拆分的算法逻辑将会有多复杂,这无疑是一个灾难。

但当用平面扫描策略构造Voronoi图时,还能继续维持这个特性么?在回答这个问题之前,我们先来看看上一节的Voronoi图示例:

在这里插入图片描述

这个例子很明确的告诉我们,如果还沿用之前的策略,无疑需要对算法状态进行回退,从而使算法逻辑异常复杂。现在原先的平面扫描策略遇到不小的困境。这也是为什么Voronoi构造的平面扫描算法的发现时间,相对其他算法较晚的原因,比如分治,原因也很简单,只要有人想要用平面扫描策略构造Voronoi图就会遇到“回退困境”。

那这是否意味着平面扫描策略对于构造Voronoi图来说,是个死胡同呢?很幸运地是,基于Fortune的平面扫描策略很好地规避了“回退困境(Trackback dilemma)”,使平面扫描策略也能在构造Voronoi图上大显身手,而且大家后续也能看到这个比较特殊得平面扫描策略非常的优雅,为什么这么说呢?如果说之前的算法都是把几何图形计算出来,那么基于Fortune的平面扫描算法是将Voronoi图”描绘“出来的,如同画家的画笔一样,一笔一笔地将Voronoi图勾勒出来。接下来,我们就来看看这个神奇的算法吧!

2. 另一个Voronoi图

为了规避”回退困境“,Fortune的策略是将原来的Voronoi图转换成另一种等价的拓扑结构。这个结构中,原本由直线组成的Voronoi Edge将会变成曲线。下图展示了由曲线组成的Voronoi图1

在这里插入图片描述

通过这种”以曲代直“的方法,我们就能有效避免”回退困境“,但是在实际计算中,我们不会去真正计算经过变换后的Voronoi图,而是通过抛物线来”描绘“出Voronoi Edge和Vertex,是不是觉得非常神奇?我特地从邓老师的教学视频中,截取了一个Forutne算法的演示动画1,大家可以看看这个示例,从感官上体会一下抛物线的作用,以及整个算法大致的思路,最重要的是去感受一下这个算法的神奇之处,也是我们之前提到的:

如果说之前的算法都是把几何图形计算出来,那么基于Fortune的平面扫描算法是将Voronoi图”描绘“出来的,如同画家的画笔一样,一笔一笔地将Voronoi图勾勒出来

基于Fortune算法的Voronoi图示例

至于这个算法究竟是如何运用抛物线来计算Voronoi图的,我们就把这个问题留到下一节吧~


上一节:Voronoi图(二):基本概念和性质

下一节:Voronoi图(四):抛物线的妙用

系列汇总:塞尔达和计算几何 | Voronoi图详解文章汇总(含代码)

3. 参考资料

  1. Computational Geometry: Algorithms and Applications
  2. 计算几何 ⎯⎯ 算法与应用, 邓俊辉译,清华大学出版社
  3. 计算几何 | Computational Geometry

4. 免责声明

※ 本文之中如有错误和不准确的地方,欢迎大家指正哒~
※ 此项目仅用于学习交流,请不要用于任何形式的商用用途,谢谢呢;


在这里插入图片描述


  1. 计算几何 | Computational Geometry ↩︎ ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值