2016.10.18 孙广东
http://blog.csdn.net/u010019717
日文《【Unity】Ear Clipping Triangulation》, 它使用这个技术 弄了软体的功能 复原了 Soft Body - p5.js
这也是我Get到的新概念.
一种 网格多边形三角化算法之一。
我之前 也写过文章关于在Unity下 使用Mesh 绘制多边形, 正方体、 三棱锥等。
我在搜索这个概念的时候看到一篇 非常好的翻译文章:
http://www.cnblogs.com/xignzou/p/3721494.html
抱歉, 我下面也只是做一个粘贴而已。 和一些自己当时的理解
使用EarClipping三角化多边形(翻译)
---Triangulation by Ear Clipping(http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf)
内容提要
1、简介
2、Ear Clipping方法
3、含有岛洞的多边形
4、查找相互可见点
5、含有多个岛洞的多边形
6、嵌套多边形
1、简介
将简单多边形转换成一组由同样顶点组成的三角形集合是计算机图形学中的一个经典问题。问题中,简单多边形是指由一组有序顶点组成的,点V0~点Vn-1。相邻的顶点之间通过边(Vi,Vi-1)连接,并且边(Vn-1,V0)连接起始点。每个顶点被两条边所共享,而边的所有交点都是顶点。图1.1的示例则是说明
图中,左边的多边形是个简单多边形,中间的多边形点1被四条边共享,不符合定义的条件,不算是简单多边形,右侧的多边形中边14,边02的交点不是我们定义的顶点之一,因此该图形也不符合简单多边形的定义。
图1.1 简单多边形示例
如果一个多边形是简单多边形,当你延长一条边的时候,内部有界区域中总是在边的一侧。假设多边形顶点逆时针排序,那么当你延长边的时候,内部指的便是你的左边。 我们图1.1中的简单多边形顶点顺序使用的便是逆时针的方法。
将一个简单多边分解成三角形集合的方法称之为多边形的三角形化(triangulation of thePolygon)。几何学的知识告诉我们,由n个顶点组成的简单多边形总是可以分解成n-2个三角形。解决该问题的方法比较多,他们共同的特点就是算法的复杂度渐近阶随着n的增长没有约束(Various algorithms have beendeveloped for triangulation, each characterized by its asymptotic order as ngrows without bound.)。最简单的分割算法是耳剪裁(EarClipping),正是本文档中所要描述的算法。EarClipping的算法复杂度O(n2_n平方),虽然也存在效率更高的算法,但是被其他组织严格使用并没有公开。水平分解成梯形随后被自己单调三角多边形的鉴定阳离子是一种复杂度为O(nlog n)的算法[ 1 , 3 ] 。使用增量的改进随机算法产生一个O ( n日志? n),其中记录? n为重对数函数[ 5 ]。此功能是电子?作为各自一个常数非常大的n ,你会在实践中看到的,所以对于所有的实际目的的随机方法是线性时间。理论存在的复杂度为O(n)的算法,比较复杂,到目前依旧没有看到具体的公开实现。
2、Ear Clipping方法
简单多边形的耳朵,是指由连续顶点V0,V1和V2(就是这样的顺序相邻)组成的内部不包含其他任意顶点的三角形。在计算机几何术语中,v0与V2之间的连线称之为多边形的对角线(这个找完之后要在编辑器中显示出来会更好看出三角形分割), 点V1称之为耳尖(找耳尖也是这么找的)。虽然你可以将耳尖放到三角形的任意一个顶点上,但是我们认为三角形包含一个耳尖。一个由四个顶点(或者更多)组成的多变形至少有两个不重叠的耳尖。这个特性提供了一个通过递归来解决三角化分割的方法。针对由N个定点组成的多边形,找到其耳尖,移除唯一耳尖上的顶点,此时剩余顶点组成了一个n-1个顶点的简单多边形。我们重复这个操作知道剩余三个顶点。这样的话会产生一个复杂度为O(N3)的算法。
我发现一个现象, 如果一个顶点是耳尖, 一定是凸顶点。 反之不成立。
随着一些细节改进,耳