Poly2Tri介绍[转]
https://blog.csdn.net/xys206006/article/details/83002326
这是Poly2Tri介绍的翻译博文。
原文链接:http://sites-final.uclouvain.be/mema/Poly2Tri/poly2tri.html
引言
三角化算法一直是** 计算几何(computational geometry)** 方向的研究热点。
前人研究发展如下表所示:
前人对三角化算法总结链接:http://vterrain.org/Implementation/Libs/triangulate.html
- 计算几何领域通常认定三种最常用的算法:
-
- Recursive Ear Cutting algorithm,由ElGindy, Everett and Toussaint提供[1]
-
- Sweep Line algorithm,由 Garey等提供[2]
-
- Incremental Randomized Algorithm,由Sediel[3]和Amato[4]提供
- 三种算法比较:
-
- recursive ear cutting algorithm最容易实现,但是性能最糟,并且难以扩展到存在洞的多边形情况
-
- incremental randomized algorith性能可能是最好的,但是难以实现
-
- sweep line algorithm相对来说,性能中和,使用更为广泛
Sweep Line Algorithm
Mark de Berg, Marc van Kreveld, Mark Overmars, and Otfried Schwarzkopf and J. O’Rourke 等人总结了Sweep Line Algorithm,详见引用[5] [6]
- Sweep Line Algorithm基本策略:
-
- 将多变形分割成按照y方向单调排序(y-monotone)小多边形,时间复杂度为O(nlog(n))
-
- 再三角化这些顶点,时间复杂度是线性的
为了将多变形单调化(monotone),需要将多变形顶点分成5种类型:开始顶点(start vertex)、结束顶点(end vertex)、分割顶点(split vertex)、合并顶点(merge vertex)、规则顶点(regular vertex)。原文作者为了容易实现这个算法,又将规则顶点分为规则向下的顶点(regular down)和规则向上的顶点(regular up),如下图1.a所示。作者对此种分法的解释如下:多变形顶点顺时针组织,洞的方向也是顺时针,内部的多变形肯定位于外部多边形规则向上的点的左边,而位于规则向下的点的右边,这样约定,在实现中对一些判断不需要额外的计算和存储。
A polygon can be partitioned to monontone pieces by getting rid of its split or merge vertices (adding diagonals). When a diagonal is inserted, an auxliary diagonal is inserted at the same time on the opposite direction for monotone piece searching purpose (all monotone pieces can be easily constructed by these auxiliary diagonals since each diagonal is always shared by two adjacent monontone pieces), see Figure 1.b. Specificly, for each split vertex vi, a diagonal is inserted to the lowest vertex above it. On the contrary, for each merge vertex, a diagonal is inserted to the highest vertex below it. This lowest/highest vertex is often called helper of directly left edge of vi.
Poly2Tri算法例子
还有更多的例子,可点击原文链接查看
引用
- G. Toussaint, Efficient triangulation of simeple polygons.
- Garey, et al, Triangulating a simple polygon, Information Processing Letters, vol. 7 no. 4, 1978).
- R. Seidel, A simple and fast incremental randomized algorithm for computing trapezoidal decompositions and for triangulating polygons. Comput. Geom. Theory Appl., 1(1):51-64, 1991.
- Nancy M.A., Michael T.G., Edgar, A.R., Linear-time Triangulation of a simple Polygon Made easier Via Randomization, 2000.
- Mark de Berg, Marc van Kreveld, Mark Overmars, and Otfried Schwarzkopf, Computational Geometry: Algorithms and Applications, 2nd Edition
- J. O’Rourke, Computational in C, 2nd Edition.
Poly2Tri介绍[转]的更多相关文章
- CSS3 background-image背景图片相关介绍
这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML5 介绍
本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...
- ExtJS 4.2 介绍
本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...
随机推荐
- Orleans介绍
一.介绍 Orleans是一个框架,提供了一个直接的方法来构建分布式高规模计算应用程序 默认可扩展 -> Orleans处理构建分布式系统的复杂性,使您的应用程序能够扩展到数百台服务器.低延迟 ...
- iOS 11开发教程(十四)iOS11应用代码添加视图
iOS 11开发教程(十四)iOS11应用代码添加视图 如果开发者想要使用代码为主视图添加视图,该怎么办呢.以下将为开发者解决这一问题.要使用代码为主视图添加视图需要实现3个步骤. (1)实例化视图对 ...
- hdu 5195 线段树
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABIgAAABeCAIAAADHZri1AAATWklEQVR4nO3dvU4jTRaA4b2nvgNzBw
- VGA Signal Timing
VGA Signal Timing 640 x 350 VGA 640x350@70 Hz (pixel clock 25.175 MHz) VESA 640x350@85 Hz (pixel clo ...
- gitblit.cmd运行自动关闭
前几天运行gitblit.cmd一直正常,今天运行gitblit.cmd,几秒钟后命令行窗口就自动关闭了,导致无法启动gitblit服务器,查看日志如下: 刚开始以为是防火墙问题,在防火墙中添加了程序 ...
- android 控件: xml 设置 Button 按下背景
本篇文章讲述了不使用java代码来改变 Button 按下和未按下时的背景. 首先准备两张图片, 分别是按钮按下和按钮未按下的. 在res/drawable 文件夹中创建一个button_select ...
- 基于TQ2440和Qemu的GDB+串口调试(1)
作者 彭东林 pengdonglin137@163.com 平台 TQ2440 + Linux-4.10.17 Qemu(vexpress-ca9) + Linux-4.10.17 概述 下面 ...
- 一个简单例子理解C#的协变和逆变
关于协变逆变,SolidMango的解释是比较可取的.有了协变,比如,在需要返回IEnumerable<object>类型的时候,可以使用IEnmerable<string>来 ...
- lufylegend:文本、鼠标事件、键盘事件
1.文本 <script type="text/javascript">init(50,"mylegend",500,350,main);funct ...
- Android控件之ImageSwticher
Android控件之ImageSwticher 1. ImageSwticher介绍 ImageSwitcher是图片切换的控件,它能实现图片切换时的动画效果,包括图片导入效果.图片消失效果等等.An ...