沃罗诺伊图 (Voronoi diagram)

Introduction: what is voronoi diagram?

沃罗诺伊图 (Voronoi diagram),取名自俄罗斯数学家乔治·沃罗诺伊(Georgy Voronoi)。这是一个自然界中经常出现的简单的数学震撼(笑),在科学技术领域也有许许多多的应用(图像处理、路径规划..好像是)

以上面的Voronoi diagram为例,图上有40个随机放置的核(nucleus),以及围住这些点的区域(Region).一眼之下,这些图好像杂乱无章,没有什么规律可寻。但是仔细观察可以发现,Region围住的点离各自的核最接近。

Voronoi diagram的特点是:每一个Region围住的点都是离各自Nucleus最近的点。 在图上随便找一个位置,你将会发现这个位置到所属Nucleus的直线距离不会大于到达其余任意一个Nucleus的直线距离。

绘制

现在我们有了Voronoi diagram的明确定义,可以开始绘制它了。然而我们不能直接入手去绘制图像本身,而应该先绘制核的德劳内三角剖分(Delaunay triangulation)。Delaunay triangulation是指用图上的点作为三角形的顶点构造一组三角形,使其满足没有任何一个顶点落在其它三角形的外接圆内

上图中有10个随机分布的黑点,黑色三角即为Delaunay triangulation,绿色点为外接圆的圆心。仔细比对可以发现确实没有任何一个顶点落在别的三角形的外接圆内捏。

那么Delaunay triangulaltion和Voronoi diagram有什么联系呢?我们看同一组随机点的Voronoi diagram和Delaunay triangulation长啥样

仔细观测..脑补右侧图中三角形的外接圆..会发现Voronoi diagram中所有线段交战都恰好对应于Delaunay triangulation外接圆的一个圆心!这就是为什么我们需要先绘制出Delaunay triangulation.

Python

...哇,Python就像是一个究极傻瓜相机

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi,voronoi_plot_2d np.random.seed()
points=np.random.rand(40,2) vor=Voronoi(points) voronoi_plot_2d(vor,show_points=True,show_vertices=False,line_width=0.5) plt.show()

就画好一个Voronoi diagram了。(具体可参照Scipy官方的Voronoivoronoi_plot_2d

沃罗诺伊图 (Voronoi diagram)的更多相关文章

  1. 沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)

    沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)是由俄国数学家格奥尔吉·沃罗诺伊建立的空间分割算法.灵感来源于笛卡尔用凸域分割空间的思想. ...

  2. 维诺图(Voronoi Diagram)分析与实现(转)

    一.问题描述1.Voronoi图的定义又叫泰森多边形或Dirichlet图,它是由一组由连接两邻点直线的垂直平分线组成的连续多边形组成. 2.Voronoi图的特点(1)每个V多边形内有一个生成元: ...

  3. Voronoi Diagram——维诺图

    Voronoi图定义   任意两点p 和q 之间的欧氏距离,记作 dist(p, q) .就平面情况而言,我们有           dist(p, q) =  (px-qx)2+ (py-qy)2 ...

  4. GDC2016【彩虹六号:围攻 】使丰富的“突破”成为可能的破坏系统

      [彩虹六号:围攻 ]使得丰富的“突破”成为可能的破坏系统 深奥的战术游戏的背景下,最新的程序化破坏技术[REALBLAST]!     进行演讲的是Ubisoft Montreal的Julien ...

  5. d3基本图形

                                             柱状图                                   散点图.气泡图               ...

  6. 充分利用 UE4 中的噪声

    转自:https://www.unrealengine.com/zh-CN/blog/getting-the-most-out-of-noise-in-ue4 UE4 推出基于材质的程序式噪声已经有一 ...

  7. BOOST Voronoi Visualizer

    BOOST Voronoi Visualizer eryar@163.com Abstract. The Voronoi extension of the Boost.Polygon library ...

  8. Visulalize Boost Voronoi in OpenSceneGraph

    Visulalize Boost Voronoi in OpenSceneGraph eryar@163.com Abstract. One of the important features of ...

  9. Visulalization Voronoi in OpenSceneGraph

    Visulalization Voronoi in OpenSceneGraph eryar@163.com Abstract. In mathematics a Voronoi diagram is ...

  10. 天气预报API(二):全球城市、景点代码列表(“旧编码”)

    说明 2016-12-10 补充 (后来)偶然发现中国天气网已经有城市ID列表的网页...还发现城市编码有两种,暂且称中国天气网这些编码为旧标准"旧编码"的特征是 9个字符长度; ...

随机推荐

  1. css实现水平垂直居中的几种方法

    一,已知宽高 1 <style> 2 #box { 3 height: 400px; 4 width: 400px; 5 border: 1px solid grey; 6 positio ...

  2. class(类)和构造函数(原型对象)

    构造函数和class的关系,还有面向对象和原型对象,其实很多人都会很困惑这些概念,这是第二次总结这些概念了,之前一次,没有class类,其实了解了构造函数,class也就很容易理解了 一. 构造函数和 ...

  3. StarCoder: 最先进的代码大模型

    关于 BigCode BigCode 是由 Hugging Face 和 ServiceNow 共同领导的开放式科学合作项目,该项目致力于开发负责任的代码大模型. StarCoder 简介 StarC ...

  4. 音视频八股文(7)-- 音频aac adts

    AAC介绍 AAC(Advanced Audio Coding)是一种现代的音频编码技术,用于数字音频的传输和存储领域.AAC是MPEG-2和MPEG-4标准中的一部分,可提供更高质量的音频数据,并且 ...

  5. 2022-06-11:注意本文件中,graph不是邻接矩阵的含义,而是一个二部图。 在长度为N的邻接矩阵matrix中,所有的点有N个,matrix[i][j]表示点i到点j的距离或者权重, 而在二部

    2022-06-11:注意本文件中,graph不是邻接矩阵的含义,而是一个二部图. 在长度为N的邻接矩阵matrix中,所有的点有N个,matrix[i][j]表示点i到点j的距离或者权重, 而在二部 ...

  6. getattr函数

    函数说明 getattr(object, name, default=None) object:类实例 name:str 属性名 default:str 如果没有查找到,用该值替代 用法实现反射,主要 ...

  7. Linux:论如何在虚拟机上挂载多个镜像?

    欢迎来到千汐   博客名称:千秋云染博客网址:https://www.cnblogs.com/skyrainmom 寄语:在混乱不堪的世界里你只管前行,时间替会证明一切 world cookie 我可 ...

  8. 使用Cordova插件实现两个app之间的相互调用和通讯

    几年前使用Cordova 进行两个app之间的相互调用和通讯:当时也是几经折腾,今天把它整理出来,理一下思路,也方便有同样需求的朋友参考 一.require引入 plugin require(&quo ...

  9. 【Python&RS】GDAL计算遥感影像光谱指数(如NDVI、NDWI、EVI等)

            GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它 ...

  10. @SuppressWarnings注解的使用

    Java编译器在编译代码时,会产生一些安全警告信息.如果被@SuppressWarnings注解标记的元素,就可以告诉编译器抑制指定的警告. 先看看@SuppressWarnings注解在Java S ...