沃罗诺伊图 (Voronoi diagram)
沃罗诺伊图 (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官方的Voronoi、voronoi_plot_2d)
沃罗诺伊图 (Voronoi diagram)的更多相关文章
- 沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)
沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)是由俄国数学家格奥尔吉·沃罗诺伊建立的空间分割算法.灵感来源于笛卡尔用凸域分割空间的思想. ...
- 维诺图(Voronoi Diagram)分析与实现(转)
一.问题描述1.Voronoi图的定义又叫泰森多边形或Dirichlet图,它是由一组由连接两邻点直线的垂直平分线组成的连续多边形组成. 2.Voronoi图的特点(1)每个V多边形内有一个生成元: ...
- Voronoi Diagram——维诺图
Voronoi图定义 任意两点p 和q 之间的欧氏距离,记作 dist(p, q) .就平面情况而言,我们有 dist(p, q) = (px-qx)2+ (py-qy)2 ...
- GDC2016【彩虹六号:围攻 】使丰富的“突破”成为可能的破坏系统
[彩虹六号:围攻 ]使得丰富的“突破”成为可能的破坏系统 深奥的战术游戏的背景下,最新的程序化破坏技术[REALBLAST]! 进行演讲的是Ubisoft Montreal的Julien ...
- d3基本图形
柱状图 散点图.气泡图 ...
- 充分利用 UE4 中的噪声
转自:https://www.unrealengine.com/zh-CN/blog/getting-the-most-out-of-noise-in-ue4 UE4 推出基于材质的程序式噪声已经有一 ...
- BOOST Voronoi Visualizer
BOOST Voronoi Visualizer eryar@163.com Abstract. The Voronoi extension of the Boost.Polygon library ...
- Visulalize Boost Voronoi in OpenSceneGraph
Visulalize Boost Voronoi in OpenSceneGraph eryar@163.com Abstract. One of the important features of ...
- Visulalization Voronoi in OpenSceneGraph
Visulalization Voronoi in OpenSceneGraph eryar@163.com Abstract. In mathematics a Voronoi diagram is ...
- 天气预报API(二):全球城市、景点代码列表(“旧编码”)
说明 2016-12-10 补充 (后来)偶然发现中国天气网已经有城市ID列表的网页...还发现城市编码有两种,暂且称中国天气网这些编码为旧标准"旧编码"的特征是 9个字符长度; ...
随机推荐
- 第2章. reco主题介绍
1. 这是一个vuepress主题,旨在添加博客所需的分类.TAB墙.分页.评论等能: 2. 主题追求极简,根据 vuepress 的默认主题修改而成,官方的主题配置仍然适用: 3. 你可以打开 [午 ...
- Android JAVA连接MQTT,以及常见问题
本文介绍如何使用Android(JAVA)客户机连接MQTT服务器 第一步先引入MQTT 在 build.gradle 添加以下: dependencies { implementation 'org ...
- Java线程中断机制
在阅读AQS源码以及juc包很多基于AQS的应用源码过程中,会遇到很多interrupted相关的方法,这里复习一下java线程中断相关. 要点:使用interrupt()中断一个线程,该方法只是标记 ...
- Java实现平衡二叉搜索树(AVL树)
上一篇实现了二叉搜索树,本章对二叉搜索树进行改造使之成为平衡二叉搜索树(Balanced Binary Search Tree). 不平衡的二叉搜索树在极端情况下很容易退变成链表,与新增/删除/查找时 ...
- Mac终端出现 brew command not found 解决
MacOS 上您需要安装 unrar 以支持 PaddlePaddle,可以使用命令brew install unrar 执行命令后发现 brew 不存在 jimmy@MacBook-Pro ~ % ...
- 2022-07-16:以下go语言代码输出什么?A:[];B:[5];C:[5 0 0 0 0];D:[0 0 0 0 0]。 package main import ( “fmt“ )
2022-07-16:以下go语言代码输出什么?A:[]:B:[5]:C:[5 0 0 0 0]:D:[0 0 0 0 0]. package main import ( "fmt" ...
- 2022-04-28:有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,
2022-04-28:有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始, ...
- .NET 通过源码深究依赖注入原理
依赖注入 (DI) 是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组件,提高代码的可读性,扩展性和可测试性.在日常工作中,我们一定遇见过这些问题或者疑惑. Singleton服 ...
- ubuntu18 安装单机k8s v1.18.2
背景 当我们需要对k8s进行二次开发时,k8s环境是必须的,那么在ubuntu上部署单机k8s是最方便的,便于开发调试 系统准备 本人用的是Ubuntu18,以下以此为例 部署之前,最好切换至root ...
- Kubernetes(k8s)定时任务:CronJob
目录 一.系统环境 二.前言 三.Kubernetes CronJob简介 四.kubernetes CronJob和Linux crontab对比 五.CronJob表达式语法 六.创建CronJo ...