Voronoi图生成算法的实现、对比及演示实验报告

Voronoi图生成算法的实现、对比及演示实验报告
Voronoi图生成算法的实现、对比及演示实验报告

Voronoi图生成算法的实现、

对比及演示实验报告

C组

张哲 2012212882

唐磊 2012212861

陈帅 2012212906

1. 实验内容

对Voronoi图的生成算法进行实现、对比及演示。

2. 数据结构

采用DCEL结构(下面所列代码去除了函数、只留下成员变量,具体见源码中basic_types.h 文件):

class Site

{

public:

Point p;

private:

double x_, y_; //coordinates of this site

Face* incFace_; //the face that this site belongs to

};

class Vertex

{

public:

Point p;

private:

double x_, y_; //coordinates of v

Halfedge* incEdge_; //pionter to any outgoing incident halfedge

};

class Face

{

private:

Site* site_; //the site of this face

Halfedge* incEdge_; //any incident halfedge

};

class Halfedge

{

public:

bool hasDraw;

private:

Halfedge* twinEdge_; //pointer to twin halfedge

Vertex* oriVertex_; //pointer to origin vertex

Face* incFace_; //pointer to left incident face

Halfedge* prevEdge_; //pointer to CCW previous halfedge

Halfedge* nextEdge_; //pointer to CCW next halfedge

Point* midPoint_; //the midpoint of the two sites of this halfedge

Vector* direction_; //the direction of this halfedge

};

3. 算法描述

3.1 增量法

3.1.1 增量法概述

每次向voronoi图中增加一个点,寻找与这个点最近的site,从这个site开始计算新加入的点所统治的区域的边界,删除旧的边并更新DCEL结构,直到所有点都加入到图中为止。

3.1.2 重点及难点

DCEL结构的填充与更新:每插入一个新的点之后,对DCEL结构的更新都需要保证不出错。不能少更新或错更新,要保证DCEL结构的完整性及正确性。

多余边的删除与终止条件的判断:根据新加入的点位置的不同,对多余边的删除及终止条件的判断会有所不同,需要针对每种情况考虑清楚相应的对策。

边界跨越、其行进方向及终止条件的判断:同样的,由于新加入点的位置的不同(主要是在不在原来所有的点构成的凸包内),对边界的跨越、其行进方向及终止条件的判断都会有所不同。需要分别处理。

详细实现:

算法1:递归分治

算法2:merge

注意在连接的过程中删除边时的操作.若刚好被删除的边是标识某个face时,要更新此face 的边.

3.2 分治法

3.2.1 分治法概述

? Let P be a set of n points in the plane.

? If the points are vertically partitioned into two subsets R and B.

? consider the Voronoi diagram of the sets R and B.

? then the Voronoi diagram of P substantially coincides with the Voronoi diagrams of R and B!

? In fact, there exists a monotone chain of edges of V or(P) such that V or(P) coincides with V or(R) to the left of the chain, and it coincides.

3.2.2 算法思路

1.Sort the points of P by abscissa (only once) and vertically partition P into two subsets R and B,

of approximately the same size.

2.Recursively compute V or(R) and V or(B).

https://www.360docs.net/doc/19630267.html,pute the separating chain.

4.Prune the portion of V or(R) lying to the right of the chain and the portion of V or(B) lying to

its left.

如何计算中间分隔链:

? Initialization‐Find the two halflines(依据凸包计算).

to

? Starting with one of the halflines, and until getting the other one, do:

? Each time an edge e ∈ b(R,B) begins, such that e ? bij, pi ∈ R and pj ∈ B, do: ? Detect its intersection with V orR(pi).

? Detect its intersection with V orB(pj).

? Choose the first of the two intersection points.

? Detect the site pk corresponding to the new starting region Replace pi or pj (as required) by pk.

如何进行merge:

? 得到chain后,先连接chain,分两个方向

? 加入到left和right的边中.

? chain中segment是跟left相交还是right相交:

? Left:相交的边next 在segment的右,递归删

? Right:相交的边prev在segment的左,递归删

? 注意:被删除的某边可能属于某个face指向的边

3.2.3 详细实现:

算法1:递归分治

算法2:merge

注意在连接的过程中删除边时的操作.若刚好被删除的边是标识某个face时,要更新此face 的边.

4. 程序使用方法

直接用鼠标左键在空白处单击输入点:

选择菜单“功能”下的“增量”或“分治”选项来生成voronoi图:

生成的voronoi图如下:

界面左下角显示了算法生成voronoi图所用的时间,以毫秒为单位。 之后可以继续在界面上添加新的点:

并继续使用菜单上的功能生成voronoi图:

同时还可以双击界面空白处清空当前所有点,然后重新输入点:

另外,还可以使用菜单中的保存与打开功能将当前的点集保存成文本文件,以供下次打开使用。

5. 例子演示

下面所示的几个例子均可读取附带的example0x.txt文件重现。

example01.txt

example02.txt

example03.txt

example04.txt

example05.txt

example06.txt

6. 性能与鲁棒性分析

实验平台:

操作系统:Windows XP SP3 32‐bit;

处理器:Intel Core 2 Duo T6570, 2100 MHz;

内存:2GB DDR2‐800 x2;

点数与算法运行时间如下:

点数 2 4 8 16 32 64 128 256

增量 0 ms 0 ms 1 ms 3 ms 10 ms 27 ms 80 ms 277 ms 分治 0 ms 1 ms 2 ms 8 ms 22 ms 65 ms * *

*分治法由于还存在一些bug,点数过多时无法完成计算。

鲁棒性上,由于包括求交在内的全部代码均为我们手写,没有调用任何库,故对一些平行的情况可能处理的不够好,在随机生成点的情况下,增量法未观测到任何问题,分治法在点数较多的情况下会出现错误。

7. 实验总结

本次实验完成的并不是很成功,经过我们的反思,认为主要问题在于前期对选题的把握不够好。三人分别单独完成三种不同的算法任务量略大,并且初期互相交流不够充分,导致进度缓慢。同时,调试上的困难也致使我们后期花费了大量时间在debug上,对程序性能和鲁棒性的测试不够充分。

然而,本次实验也带给了我们不少的收获,例如对voronoi图生成算法的实现细节的深入理解、程序调试能力的锻炼与提升等等。

8. 参考文献

1. 计算几何课程讲义,邓俊辉

2. Aurenhammer, Franz. "Voronoi diagrams—a survey of a fundamental geometric data structure." ACM Computing Surveys (CSUR) 2

3.3 (1991): 345‐405.

3. Klein, Rolf. "Abstract Voronoi diagrams and their applications." Computational Geometry and its Applications. Springer Berlin Heidelberg, 1988. 148‐157.

4. Fortune, Steven. "A sweepline algorithm for Voronoi diagrams." Algorithmica 2.1‐4 (1987): 153‐174.

基于 Voronoi 图的 简单多边形骨架提取

计算几何课程设计报告 基于Voronoi图的简单多边形骨架提取

引言 骨架(Skeleton)又称中轴(Medial Axis),通常使用烧草模型和最大球(圆)模型来描述。骨架有着与原物体相同的拓扑和形状信息,是一种性能优良的几何特征,能够有效的描述物体,因此,在物体识别、路径规划、医学工程等领域多有应用。在物体识别等应用领域里,骨架提取的输入可以看作是空间内的点构成的多边形,对于多边形的骨架提取也成为了这些应用的基本技术,具有重要的应用意义。在此次课程设计中,我们实现了基于Voronoi 图的任意多边形的骨架提取,并提供了多边形骨架提取的演示界面。 多边形骨架 一个多边形的骨架,如上图所示,可以看作是由无数点对之间的骨架点组成的。两点间的骨架(skeleton)(等同于对中轴(medial axis)的求取)是到两点距离相等的点的轨迹,它是两点连线的垂直平分线,每一点所邻接的半平面是到其距离最小的点集相应地可扩展为离散点集的中轴定义。它是下列性质点的轨迹:其上任一点到最近两离散点距离相等,相应地也产生各点到其距离最小的点集;两线间的中轴是到两线距离相等的点的轨迹,它在两线相交时为角平分线——两线平行时为到两线距离——的平行线,每一线所邻接并以中轴为界的区域是到其距离最小的点集。一线和一点间的中轴是到该点(线距离相等的点的轨迹,它是以该点为焦点、该线为准线的抛物线。该点或线所邻接并以中轴为界的区域是到其距离最小的点集。 多边形骨架的几何算法 多边形骨架(中轴)的几何算法,是由多边形的某一点开始,找出参与中轴线计算的相应的线段与线段、点与线段、点与点,实质都转化为求某个特定点(中轴转折点)的问题,

一般图形Voronoi图的离散生成

一般图形Voronoi图的离散生成

————————————————————————————————作者:————————————————————————————————日期:

一般图形Voronoi图的离散生成-工程论文 一般图形Voronoi图的离散生成 刘欣LIU Xin (承德石油高等专科学校社科与数理部,承德067000)(Department of Social Science and Mathematics,Chengde Petroleum College,Chengde 067000,China) 摘要:由于一般图形形状和位置的任意性,一般图形Voronoi图往往比较复杂,难以将传统的构造法直接应用到一般图形Voronoi图的构造中。本文介绍了一般图形Voronoi图的离散构造法,并给出算法步骤及优势分析。Abstract:Because of the random graph shape and position,the general Voronoi graph is often more complex,it is difficult to construct the traditional method of direct application to the general structure of Voronoi graph. This paper introduces the construction method of general discrete Voronoi graph,and puts forword the algorithm steps and its advantages. 关键词:一般图形;Voronoi图;离散生成 Key words:general graphs;Voronoi diagram;discrete generation 中图分类号:TP391 文献标识码:A 文章编号:1006-4311(2015)19-0162-02 基金项目:河北省高等学校科学技术研究项,编号为QN20131159;承德市软科学研究计划项目(承德市公交线路的发展现状与优化分析):201422123。作者简介:刘欣(1977-),女,河北承德人,承德石油高等专科学校社科数

泰森多边形(Voronoi图)生成算法

泰森多边形(Voronoi图)生成算法

一、文档目的 本文描述了在geomodel模块中,生成泰森多边形所使用的算法。 二、概述 GIS和地理分析中经常采用泰森多边形进行快速插值,和分析地理实体的影响区域,是解决邻接度问题的又一常用工具。 荷兰气候学家A·H·Thiessen提出了一种根据离散分布的气象站的降雨量来计算平均降雨量的方法,即将所有相邻气象站连成三角形,作这些三角形各边的垂直平分线,于是每个气象站周围的若干垂直平分线便围成一个多边形。用这个多边形内所包含的一个唯一气象站的降雨强度来表示这个多边形区域内的降雨强度,并称这个多边形为泰森多边形。如图1,其中虚线构成的多边形就是泰森多边形。泰森多边形每个顶点是每个三角形的外接圆圆心。泰森多边形也称为Voronoi图,或dirichlet图。 图1 泰森多边形 泰森多边形的特性是: ●每个泰森多边形内仅含有一个离散点数据 ●泰森多边形内的点到相应离散点的距离最近 ●位于泰森多边形边上的点到其两边的离散点的距离相等 泰森多边形可用于定性分析、统计分析、邻近分析等。例如,可以用离散点的性质来描述泰森多边形区域的性质;可用离散点的数据来计算泰森多边形区域的数据;判断一个离散点与其它哪些离散点相邻时,可根据泰森多边形直接得出,且若泰森多边形是n边形,则就与n个离散点相邻;当某一数据点落入某一泰森多边形中时,它与相应的离散点最邻近,无需计算距离。 在泰森多边形的构建中,首先要将离散点构成三角网。这种三角网称为Delaunay三角网。 三、Delaulay三角形的构建 Delaunay三角网的构建也称为不规则三角网的构建,就是由离散数据点构建三角网,如图2,即确定哪三个数据点构成一个三角形,也称为自动联接三角网。即对于平面上n个离散点,其平面坐标为(x i,y i),i=1,2,…,n,将其中相近的三点构成最佳三角形,使每个离散点都成为三角形的顶点。 图2 Delaunay三角网

多边形的Voronoi图及其研究应用

多边形的Voronoi图及其研究应用 Voronoi图是计算几何的重要几何结构之一,也是计算几何的重要研究内容之一。它按照对象集合中元素的最近属性将空间划分成许多单元区域。由于Voronoi图具有最近性、邻接性等众多性质和较完善的理论体系,如今已经在图形学、机械工程、虚拟现实、地理信息系统、机器人、图像处理、CAD等领域得到广泛应用,也是解决距离计算、碰撞检测、路径规划、Delaunay三角化、骨架计算、凸包计算以及可见性计算等计算几何其它问题的有效工具,因而受到人们的广泛关注。 目前,对Voronoi图的研究工作,从所在空间上来说,更多的集中在2维上;从生成对象上来说,更多的集中在离散点集上;在研究内容上来说,主要集中在其构造算法和相关应用研究上。对于多边形的Voronoi 图来说,则主要集中在多边形的内部Voronoi图的构造和相关应用上。 本论文对多边形的内部和外部Voronoi图的相关性质进行了较为深入的研究,并以此为基础研究解决在图形图像、虚拟现实等方面的研究工作中遇到的可见性计算、距离计算以及骨架计算等问题。 本论文的贡献主要有: 1、分析了M.Held给出的关于多边形内部Voronoi图顶点和边数的上界所存在的局限性:只适用于单边界多边形,对多边界多边形则不适用;给出了新的可适用于单边界和多边界多边形的内部Voronoi图顶点和边数上界估计;同时给出了多边形的外部Voronoi图顶点和边数上界估计;并对多边形的内部和外部Voronoi图的每一个Voronoi区域所包含的顶点和边数的平均值进行了估计。 2、提出了一种基于Voronoi图的计算多边形可见性的算法。我们用多边形的Voronoi图建立多边形的骨架,利用Voronoi图的邻近属性和最近特性等性质,沿着骨架在局部范围内确定可能产生遮挡的对象,从而确定多边形内任意一点的可见边。在预先建立一个多边形的骨架后,可在时间内确定多边形内任一观察点的可见边,其中为搜索过程中涉及到的Voronoi图中的骨架元素的数目。大部分情况和可见边数接近。本算法时间复杂度低,适用于任意多边形,且易于理解和编程实现。 3、给出了基于Voronoi图快速计算两个分离凸多边形距离的算法。算法利用两个分离凸多边形P和Q的外部Voronoi图的性质及其相互间的位置关系,采用二分法逐渐缩小搜索范围来快速查找最短距离对象对。算法首先根据多边形外部Voronoi图的性质确定最短距离对象对所在的初始搜索范围P(和Q(;然后取P(和Q(的中间顶点对象pm1和qm2,它们分别将P(,Q(平分成和,和四个子搜索范围,并根据pm1和qm2及其所在Voronoi 区域的位置关系,确定可删除的一个或两个子搜索范围;然后在剩余的子搜索范围继续用二分法查找最短距离

Voronoi图的构建和应用

Voronoi图的构建和应用 侯玉昭 (南京航空航天大学机电学院,南京市,210016) 摘要:Voronoi图是计算几何中常用而又重要的几何结构,它有很强的实用价值。本文介绍了平面点集上的Voronoi图的一些生成方法,主要是矢量法和栅格法的原理与生成过程。其次就是V图在各个领域中的应用和分析了V图的一些优势特点。以此希望我国科研人员关注V图的研发工作。 关键词:V oronoi图;矢量法;栅格法;V图应用 Construction and application of V oronoi diagram Hou Yuzhao (College of Aerospace Engineering, Nanjing University of Aeronautics&Astronautics, Nanjing, 210016, China;) Abstract:V oronoi graph is a common and important computational geometry in diagram geometry,it has a strong practical value.This paper introduces some generation method for planar point set on the V oronoi graph,it is mainly the principle and formation process of the vector method and the grid method.The second is the application of V graphs in various fields and analyzes some advantages of V graphs. We hope our researchers focus on R&D of V graph. Key words:V oronoi graph;Vector method;Grid method;Application of V oronoi graph 引言 Voronoi图的历史是相当古老的。许多不同的自然结构都与Voronoi图十分接近,并且这些结构曾经被很多早期的科学家甚至普通人注意过。早在1908年,俄国数学家G.Voronoi 在对二次型的研究中首先使用了这种图,后被计算机研究者称之为Voronoi图。1944年,笛卡尔使用了一种图来显示太阳系内部和外部物质的性质。尽管没有特殊的注解来解释那些图的结构,但实际上这些图已经十分接近今天我们所说的加权Voronoi图。Voronoi图在许多领域都在尝试它的应用,并取得了成功。如天文学家用来研究宇宙结构;考古学家用来识别新石器时代不同部落影响下的地区;气象学家在仪器分布不足时估算降雨(雪)量;城市规划者在城市中用来进行设施定位;生物学家用来研究毛细血管供应肌肉组织情况。这些研究表面上涉及完全不同的现象,但实际上都可以用Voronoi图的概念来解释。 近年来,Voronoi图已被纳入计算几何的范畴,成为计算几何的一个重要分支。随着计算机科学与技术的飞速发展,尤其是计算机在图像处理方面的广泛应用,使得计算几何的研究,越来越受重视并日益蓬勃发展起来。计算几何在计算机辅助设计、计算机图形学、数字图像处理、地理信息处理、机器人等许多领域都有重要应用。它已成功解决了找最近点,求最大空圆,求n个点的凸包,求最小树等问题。另外,Voronoi图在模式识别、生态研究、城市规划、最优化配置、物理学等许多领域也有广泛的应用[1]。 Voronoi图构建 V图有着按距离划分邻近区域的普遍特性,应用范围广。生成V图的方法很多,一般分为两种:矢量方法;栅格方法。 1.1矢量方法(基于GIS软件) 矢量方法生成V图大多是对点实体。方法分为:对偶生成法;增添法;部件合成法等。

相关主题
相关文档
最新文档