定义:
平面中一堆点,每个点有自己的领域,领域中任意位置到这个基点的距离都要小于到其他点的距离(很自然想到垂直平分线、抛物线)
维诺图本身是根据n个基点构造的,结果中最多3n-6条边,最多2n-5个顶点,是线性的
复杂度:
扫描线算法:是一种基于排序的算法,类比可得,最低时间复杂度O(NlogN)
扫描线算法流程:空间O(N)
扫描线从图像的一边到另一边(假设为从上到下)
扫描线会在遇到(扫描到)某个点(event point)时触发事件
对于维诺图,提出海岸线(beach line),海岸线的每条弧都是抛物线线
海岸线处于上方点和下方平直的扫描线中央,绝对意义的中间:海岸线上任意一点到已经扫描的点中最近那个点的距离与到海岸线(垂线)的距离是一样的
海岸线的提出是为了保证海岸线扫过的部分不会再改变,如果只用平直的一条扫描线,还会对扫描的部分进行维诺图修改。
海岸线的直观结果是每个扫描过的点和扫描线形成的抛物线的合并然后取最小的值(最低的部分)
事件触发:
基点事件(site event):水平的扫描线在前,当遇到event point的时候,触发事件:海岸线将出现一个新的弧,弧相交的断点(brakpoint)处(由1边2)维诺边发生分叉:推论:因此海岸线弧的数量不超过2 * n - 1。
圆事件( circle event):默认情况下随着扫描线的推移,海岸线中的某条弧收缩为一个点(随后衍生为维诺边),海岸线生成的维诺图边界将发生合并;题外话:对于弧线收缩为一个点(维诺顶点):这个点是它所在维诺图细胞核和两边细胞细胞核构成的圆的圆心,而这个圆是空圆。
海岸线(beach line)
海岸线的每条弧都是抛物线线
每个海岸线弧线对应一个事件队列中的事件
海岸线处于上方点和下方平直的扫描线中央,绝对意义的中间:海岸线上任意一点到已经扫描的点中最近那个点的距离与到海岸线(垂线)的距离是一样的
海岸线的提出是为了保证海岸线扫过的部分不会再改变,如果只用平直的一条扫描线,还会对扫描的部分进行维诺图修改。
海岸线的直观结果是每个扫描过的点和扫描线形成的抛物线的合并然后取最小的值

这篇博客深入探讨了维诺图的构造过程,重点介绍了扫描线算法,包括其时间复杂度和空间复杂度。文章提到了海岸线的概念,作为算法中的一种优化策略,确保了扫描过的部分稳定性。此外,还讨论了事件触发(基点事件和圆事件)、数据结构(如DCEL和平衡二分查找树)以及特殊情况的处理。
&spm=1001.2101.3001.5002&articleId=121579392&d=1&t=3&u=8bb315d6960947a78712ee173a958cfc)
3万+

被折叠的 条评论
为什么被折叠?



