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

本文主要是介绍沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)是由俄国数学家格奥尔吉·沃罗诺伊建立的空间分割算法。灵感来源于笛卡尔用凸域分割空间的思想。在几何,晶体学建筑学,地理学,气象学,信息系统等许多领域有广泛的应用。

泰森多边形法,荷兰气候学家A·H·Thiessen提出了一种根据离散分布的气象站的降雨量,来计算平均降雨量的方法,即将所有相邻气象站连成三角形,作这些三角形各边的垂直平分线,将每个三角形的三条边的垂直平分线的交点(也就是外接圆的圆心)连接起来得到一个多边形。用这个多边形内所包含的一个唯一气象站的降雨强度来表示这个多边形区域内的降雨强度,并称这个多边形为泰森多边形。如图,其中虚线构成的多边形就是泰森多边形。泰森多边形每个顶点是每个三角形的外接圆圆心。泰森多边形也称为Voronoi图,或dirichlet图。

 

一、文档目的
本文描述了在geomodel模块中,生成泰森多边形所使用的算法。
二、概述
GIS和地理分析中经常采用泰森多边形进行快速插值,和分析地理实体的影响区域,是解决邻接度问题的又一常用工具。

荷兰气候学家A·H·Thiessen提出了一种根据离散分布的气象站的降雨量来计算平均降雨量的方法,即将所有相邻气象站连成三角形,作这些三角形各边的垂直平分线,于是每个气象站周围的若干垂直平分线便围成一个多边形。用这个多边形内所包含的一个唯一气象站的降雨强度来表示这个多边形区域内的降雨强度,并称这个多边形为泰森多边形。如图1,其中虚线构成的多边形就是泰森多边形。泰森多边形每个顶点是每个三角形的外接圆圆心。泰森多边形也称为Voronoi图,或dirichlet图。

 

泰森多边形的特性是:
1,每个泰森多边形内仅含有一个离散点数据。
2,泰森多边形内的点到相应离散点的距离最近。
3,位于泰森多边形边上的点到其两边的离散点的距离相等。
泰森多边形可用于定性分析、统计分析、邻近分析等。例如,可以用离散点的性质来描述泰森多边形区域的性质;可用离散点的数据来计算泰森多边形区域的数据;判断一个离散点与其它哪些离散点相邻时,可根据泰森多边形直接得出,且若泰森多边形是n边形,则就与n个离散点相邻;当某一数据点落入某一泰森多边形中时,它与相应的离散点最邻近,无需计算距离。
在泰森多边形的构建中,首先要将离散点构成三角网。这种三角网称为Delaunay三角网。


三、Delaulay三角形的构建
Delaunay三角网的构建也称为不规则三角网的构建,就是由离散数据点构建三角网,如图2,即确定哪三个数据点构成一个三角形,也称为自动联接三角网。即对于平面上n个离散点,其平面坐标为(xi,yi),i=1,2,…,n,将其中相近的三点构成最佳三角形,使每个离散点都成为三角形的顶点。

 

自动联接三角网的结果为所有三角形的三个顶点的标号,如:1,2,8;2,8,3;3,8,7;……

为了获得最佳三角形,在构三角网时,应尽可能使三角形的三内角均成锐角,即符合Delaunay三角形产生的准则:

1、任何一个Delaunay三角形的外接圆内不能包含任何其它离散点。

2、相邻两个Delaunay三角形构成凸四边形,在交换凸四边形的对角线之后,六个内角的最小者不再增大。该性质即为最小角最大准则。

 

 

下面介绍Tsai(1993)提出的在n维欧拉空间中构造Delaunay三角形的通用算法---凸包插值算法。

(一)、凸包生成

1、求出点集中满足min(x-y)、min(x+y)、max(x-y)、max(x+y)的四个点,并按逆时针方向组成一个点的链表。这4个点是离散点中与包含离散点的外接矩形的4个角点最近的点。这4个点构成的多边形作为初始凸包。

2、对于每个凸包上的点I,设它的后续点为J,计算矢量线段IJ右侧的所有点到IJ的距离,求出距离最大的点K。

3、将K插入I、J之间,并将K赋给J。

4、重复2、3步,直到点集中没有在线段IJ右侧的点为止。

5、将J赋给I,J取其后续点,重复2、3、4步。

6、当凸包中任意相邻两点连线的右侧不存在离散点时,结束点集凸包求取过程。

完成这一步后,形成了包含所有离散点的多边形(凸包),如图3所示。

 

(二)、环切边界法凸包三角剖分

在凸包链表中每次寻找一个由相邻两条凸包边组成的三角形,在该三角形的内部和边界上都不包含凸包上的任何其它点。将这个点去掉后得到新的凸包链表。重复这个过程,直到凸包链表中只剩三个离散点为止。将凸包链表中的最后三个离散点构成一个三角形,结束凸包三角剖分过程。

 

完成这一步后,将凸包中的点构成了若干Delaunay三角形,如图4所示。

 

(三)、离散点内插

在对凸包进行三角剖分之后,不在凸包上的其余离散点,可采用逐点内插的方法进行剖分。基本过程为:

1、选择一个尚未构成三角形的离散点

2、在已经生成的三角形中,找出该离散点的三角形(离散点在该三角形在内部或者在该三角形的边上)

3、如果离散点在三角形的内部,则将该三角形以及三角形的边删除,然后将三个顶点以及离散点分别连接,形成三个新的三角形。如果离散点在三角形的边上,记录点所在的边E,根据拓扑关系,找出该边的左右相邻三角形T1,T2,添加四条新边和四个新三角形NT,删除T1,T2以及边E。

对于新生成的三角形,需要挨个对其边进行空外接圆检测。具体做法为:对于新生成的三角形的边E,找出该边相邻的两个三角形,判断该边一侧的对角的顶点是否位于另外一个三角形的外接圆的里面。如果是,则将边E删除,再将两个对角连接起来,形成两个新的三角形。对于新三角形的边,同样需要进行空外接圆检测,如此继续进行,直到所有新生成的三角形都通过空外接圆检测为止。

4、重复1、2、3,直到所有非凸壳离散点都插入完为止。完成这一步后,就完成了Delaunay三角网的构建,如图5所示。

 

四、泰森多边形的建立步骤

建立泰森多边形算法的关键是对离散数据点合理地连成三角网,即构建Delaunay三角网。建立泰森多边形的步骤为:

1、离散点自动构建三角网,即构建Delaunay三角网。对离散点和形成的三角形编号,记录每个三角形是由哪三个离散点构成的。

2、找出与每个离散点相邻的所有三角形的编号,并记录下来。这只要在已构建的三角网中找出具有一个相同顶点的所有三角形即可。

 

                                               图6 泰森多边形的建立

3、对与每个离散点相邻的三角形按顺时针或逆时针方向排序,以便下一步连接生成泰森多边形。排序的方法可如图6所示。设离散点为o。找出以o为顶点的一个三角形,设为A;取三角形A除o以外的另一顶点,设为a,则另一个顶点也可找出,即为f;则下一个三角形必然是以of为边的,即为三角形F;三角形F的另一顶点为e,则下一三角形是以oe为边的;如此重复进行,直到回到oa边。

4、计算每个三角形的外接圆圆心,并记录之。

5、根据每个离散点的相邻三角形,连接这些相邻三角形的外接圆圆心,即得到泰森多边形。对于三角网边缘的泰森多边形,可作垂直平分线与图廓相交,与图廓一起构成泰森多边形。

转载于:https://www.cnblogs.com/sddai/p/5740172.html

这篇关于沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/541291

相关文章

【Python机器学习】NLP词频背后的含义——隐性狄利克雷分布(LDiA)

目录 LDiA思想 基于LDiA主题模型的短消息语义分析 LDiA+LDA=垃圾消息过滤器 更公平的对比:32个LDiA主题 对于大多数主题建模、语义搜索或基于内容的推荐引擎来说,LSA应该是首选方法。它的数学机理直观、有效,它会产生一个线性变换,可以应用于新来的自然语言文本而不需要训练过程,并几乎不会损失精确率。但是,在某些情况下,LDiA可以给出稍好的结果。 LDiA和LS

50个BA分析工具第八个-Data Flow Diagram

知识卡片   工具名称: Data Flow Diagram(数据流程图)   工具介绍: Data Flow Diagram,数据流程图,也叫DFD,是UML里常见的一种建模的工具,是一种能全面地描述信息系统逻辑模型的主要工具,它可以用少数几种符号综合地反映出信息在系统中的流动、处理和存储情况,是结构化分析的重要方法。   解决问题: • 展示数据存在哪里,被什么流程处理,被哪

【UML图】——用UserCase Diagram来确定用户需求

在软件工程的思想指导下,人们逐渐意识到需求分析的重要性,只有开发人员对用户的需求理解透彻,才能开发出适合用户的软件,这也是缓解软件危机的一个方法,在这个阶段,软件需求说明书就给了开发人员一个指导性文档。而在UML中,我们换了一种方式,那就是用图的形式,这个图就是用例图。 所处开发阶段:用例图主要用于软件需求分析阶段 什么是用例图:用例图是用来描述用户的需求,从用户的角度描述

POJ 3006 Dirichlet's Theorem on Arithmetic Progressions

分析: 这道题要先用筛法求出10^6以内的素数。。。。我竟然觉得数据太多没用这种方式,然后写出来的代码就运行超时了,呜呜……最后还是用的筛法 Description If a and d are relatively prime positive integers, the arithmetic sequence beginning with a and increasing b

vivado DIAGRAM、HW_AXI

图表 描述 块设计(.bd)是在IP中创建的互连IP核的复杂系统 Vivado设计套件的集成商。Vivado IP集成器可让您创建复杂的 通过实例化和互连Vivado IP目录中的IP进行系统设计。一块 设计是一种分层设计,可以写入磁盘上的文件(.bd),但存储为 Vivado工具内存中的图表对象。 块设计通常是在界面级别构建的,以提高生产力,但是 也可以在端口或引脚级别进行编辑,以提供更大的控制

基于狄利克雷DirichletProcesses聚类的协同过滤推荐算法代码实现(输出聚类计算过程,分布图展示)

基于狄利克雷DirichletProcesses聚类的协同过滤推荐算法代码实现(输出聚类计算过程,分布图展示) 聚类(Clustering)就是将数据对象分组成为多个类或者簇 (Cluster),它的目标是:在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别较大。所以,在很多应用中,一个簇中的数据对象可以被作为一个整体来对待,从而减少计算量或者提高计算质量。 一、DirichletP

20、matlab信号波形生成:狄利克雷函数、高斯脉冲和高斯脉冲序列

1、狄利克雷函数生成波形diric()函数 语法:y = diric(x,n) 返回n次的狄利克雷函数对输入数组x的元素求值。 1)diric()函数 代码 x = linspace(-2*pi,2*pi,301);%定义x取值d6 = diric(x,6);d7 = diric(x,7);subplot(2,1,1)plot(x,d6)ylabel('n= 6')title(

E-R图 实体-联系图(Entity Relationship Diagram)

E-R图 实体-联系图(Entity Relationship Diagram) 矩形:表示一个实体 一张表 一个Java类 椭圆形:表示实体拥有的属性 菱形:表示多个实体之间的关系

【DeepStream5.0样例工程】deepstream-app的可视化 pipeline diagram (管道图 / 元件图 / 构件图)

我们在学习一个deepstream 样例工程的时候,我们希望知道工程中管道是由哪些元件组成,以及元件间的数据流转方式。 如果我们人工的根据代码去绘制,也是可行的,但效率比较低下,且容易出现错误。 我们可以通过一些代码实现,自动生成这样的管道图。 本文不再介绍如何生成的过程,希望了解这个过程可以查看参考文献。这里直接给出deepstream-app 样例工程生成可视化管道图的结果。 图片是高清大

【DeepStream5.0样例工程】deepstream-test1的可视化 pipeline diagram (管道图 / 元件图 / 构件图)

我们在学习一个deepstream 样例工程的时候,我们希望知道工程中管道是由哪些元件组成,以及元件间的数据流转方式。 如果我们人工的根据代码去绘制,也是可行的,但效率比较低下,且容易出现错误。 我们可以通过一些代码实现,自动生成这样的管道图。 本文不再介绍如何生成的过程,希望了解这个过程可以查看参考文献。这里直接给出deepstream-test1 样例工程生成可视化管道图的结果。 图片是高