https://blog.csdn.net/xys206006/article/details/83002326

这是Poly2Tri介绍的翻译博文。
原文链接:http://sites-final.uclouvain.be/mema/Poly2Tri/poly2tri.html

引言

三角化算法一直是** 计算几何(computational geometry)** 方向的研究热点。
前人研究发展如下表所示:

图片来源:http://www-cgrl.cs.mcgill.ca/~godfried/teaching/cg-projects/97/Thierry/thierry507webprj/complexity.html

前人对三角化算法总结链接:http://vterrain.org/Implementation/Libs/triangulate.html

计算几何领域通常认定三种最常用的算法:
  1. Recursive Ear Cutting algorithm,由ElGindy, Everett and Toussaint提供[1]
  1. Sweep Line algorithm,由 Garey等提供[2]
  1. 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基本策略:
  1. 将多变形分割成按照y方向单调排序(y-monotone)小多边形,时间复杂度为O(nlog(n))
  1. 再三角化这些顶点,时间复杂度是线性的

为了将多变形单调化(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算法例子


还有更多的例子,可点击原文链接查看

引用

    1. G. Toussaint, Efficient triangulation of simeple polygons.
    2. Garey, et al, Triangulating a simple polygon, Information Processing Letters, vol. 7 no. 4, 1978).
    3. 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.
    4. Nancy M.A., Michael T.G., Edgar, A.R., Linear-time Triangulation of a simple Polygon Made easier Via Randomization, 2000.
    5. Mark de Berg, Marc van Kreveld, Mark Overmars, and Otfried Schwarzkopf, Computational Geometry: Algorithms and Applications, 2nd Edition
    6. J. O’Rourke, Computational in C, 2nd Edition.

Poly2Tri介绍[转]的更多相关文章

  1. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  2. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  3. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  4. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  5. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  6. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  7. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  8. HTML5 介绍

    本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...

  9. ExtJS 4.2 介绍

    本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...

随机推荐

  1. 3种纯css方法控制元素隐藏显示

    1.通过hover,也是最常用的方式.此方法要求按钮与被控制元素必须有层级关系.(兼容低端浏览器常用) <div class="nav-btn"> <h2> ...

  2. 【BZOJ 3620】 3620: 似乎在梦中见过的样子 (KMP)

    3620: 似乎在梦中见过的样子 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 755  Solved: 445 Description “Madok ...

  3. Codeforces.314E.Sereja and Squares(DP)

    题目链接 http://www.cnblogs.com/TheRoadToTheGold/p/8443668.html \(Description\) 给你一个擦去了部分左括号和全部右括号的括号序列, ...

  4. 深刻领悟javascript中的exec与match方法之异同

    阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code:  var someText="web2.0 .net2.0"; ...

  5. Codeforces Round #375 (Div. 2) A. The New Year: Meeting Friends 水题

    A. The New Year: Meeting Friends 题目连接: http://codeforces.com/contest/723/problem/A Description There ...

  6. spring-boot 速成(5) profile区分环境

    maven中的profile概念,在spring-boot中一样适合,只要约定以下几个规则即可: 一.不同环境的配置文件以"application-环境名.yml"命名 举个粟子: ...

  7. Java中的锁(转)

    Java中的锁 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂.因为锁(以及其它更高级的线程同步机制)是由synchronized同步 ...

  8. 在Eclipse添加Android兼容包( v4、v7 appcompat )(转)

    昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support ...

  9. HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了

    2007 年 W3C (万维网联盟)立项 HTML5,直至 2014 年 10 月底,这个长达八年的规范终于正式封稿. 过去这些年,HTML5 颠覆了 PC 互联网的格局,优化了移动互联网的体验,接下 ...

  10. stm32f103串口实现映射功能

    在实际开发中,常常遇到串口的默认输出IO口被其它模块占用了,所以我们要用到串口IO口映射功能.是指将原来实现功能的IO口映射到其它指定IO口,其它不变.详细操作例如以下: 先贴出默认下的串口初始化设置 ...