精华内容
下载资源
问答
  • 三角剖分算法

    2017-08-13 23:43:05
    再做人脸特征点检测时,用到了三角剖分算法,搜集一下: http://blog.csdn.net/makenothing/article/details/41515827 http://www.cnblogs.com/zhiyishou/p/4430017.html ...

    再做人脸特征点检测时,用到了三角剖分算法,搜集一下:


    http://blog.csdn.net/makenothing/article/details/41515827

    http://www.cnblogs.com/zhiyishou/p/4430017.html

    http://blog.csdn.net/chinamming/article/details/16874391

    http://blog.sina.com.cn/s/blog_79b67dfe0102wzt0.html

    展开全文
  • 三角剖分 算法

    2012-12-24 15:28:44
    三角剖分,Delaunay剖分,Delaunay剖分的Lawson算法实现。
  • Delaunay三角剖分算法

    2018-05-29 17:35:52
    Delaunay三角剖分算法 1. 三角剖分与Delaunay剖分的定义 如何把一个散点集合剖分成不均匀的三角形网格,这就是散点集的三角剖分问题,散点集的三角剖分,对数值分析以及图形学来说,都是极为重要的一项预处理技术。 ...
  • [1] [1] Delaunay 三角剖分算法 点集的三角剖分Triangulation对数值分析比如有限元分析以及图形学来说都是 极为重要的一项预处理技术尤其是 Delaunay 三角剖分由于其独特性关于点集的很 多种几何图都和 Delaunay ...
  • 三角剖分算法 ,采用分治法
  • 基于GPU并行计算的Delaunay三角剖分算法研究与实现
  • 用python3.6实现delaunay三角剖分算法,读入存有坐标的csv文件,计算出结果用Tkinter库显示。
  • 顾及到不同三角形形状及坐标系的相互转换,设计了不规则工作面的三角剖分算法;基于该算法,利用MATLAB软件开发了预计程序,该程序可对缓倾斜任意工作面开采进行地表沉陷预计,可对预测结果进行直接处理而不必采用第三方...
  • 三角剖分算法(delaunay)

    2020-06-24 16:17:30
    三角剖分算法(delaunay) [2]code An Algorithm for Interpolating Irregularly-Spaced Data with Applications in Terrain Modelling [3]webdemo https://zhiyishou.github.io/Polyer/ 三角剖分是点云处理基础,Mark...

    转载
    [1]这一篇比较详细
    三角剖分算法(delaunay)

    [2]大部分教程参考的code
    An Algorithm for Interpolating Irregularly-Spaced Data with Applications in Terrain Modelling

    [3]webdemo
    https://zhiyishou.github.io/Polyer/

    最后给出一个Python现成的包

    from scipy.spatial import Delaunay
    points = np.array([[0, 4], [2, 1.1], [1, 3], [1, 2]])
    tri = Delaunay(points)
    import matplotlib.pyplot as plt
    plt.triplot(points[:,0], points[:,1], tri.simplices.copy())
    plt.plot(points[:,0], points[:,1], 'o')
    plt.show()
    

    https://www.tutorialspoint.com/scipy/scipy_spatial.htm

    … 三角剖分是点云处理基础,Mark一下

    展开全文
  • VC实现三角剖分算法

    2009-12-17 09:47:04
    MFC编写的三角剖分算法演示,随机输入多个平面点集,输出三角剖分平面图
  • 采用C#语言实现计算几何中简单多边形的三角剖分算法。内容包含源程序,可执行程序,程序运行说明文档和参考图。
  • 简单多边形的动态Delaunay三角剖分算法
  • 平面点集的三角剖分算法

    千次阅读 2015-12-31 23:22:26
    平面点集的三角剖分算法

    算法描述:生成Delaunay三角网主要有边扩展法、逐点插入法、分治算法,其中边扩展算法思路简单且易于实现。该算法的基本思想是首先找出点集中距离最短的两点并连线,然后在该线段的右边找到与此两点构成Delaunay三角形的第3点,从而生成Delaunay三角网的第1个三角形;从新生成的边出发继续搜索第3 点并扩展,直至所有的边被扩展完毕 。

    参考资料:谢文全等 间接法生成Voronoi图的设计与实现

    展开全文
  • 现有的大多数散乱点云三角剖分算法存在细节特征表现不足和适应性不强的问题,为此改进了一种自适应的三角网格剖分算法。此方法将Shepard曲面插值与多尺度分析方法相结合;引入改进的八叉树搜索思想,加细搜索进而...
  • 点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay三角剖分相关,如...
  • 开篇在做一个Low Poly的课题,而这种低多边形的成像效果在现在设计中越来越被喜欢,其中的低多边形都是由三角形组成的。...这时则要求使用三角剖分算法(Delaunay),引于【定义】三角剖分:假设V是二维实数域上的...

    开篇

    efc3a835551936a9509e2d70cc5af724.png

    在做一个Low Poly的课题,而这种低多边形的成像效果在现在设计中越来越被喜欢,其中的低多边形都是由三角形组成的。

    而如何自动生成这些看起来很特殊的三角形,就是本章要讨论的内容。

    选择

    其是最先是由很多离散的点组成,基于这个确定的点集,将点集连接成一定大小的三角形,且分配要相对合理,才能呈现出漂亮的三角化。

    这时则要求使用三角剖分算法(Delaunay),引于

    【定义】三角剖分:假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合。那么该点集V的一个三角剖分T=(V,E)是一个平面图G,该平面图满足条件:

    1.除了端点,平面图中的边不包含点集中的任何点。

    2.没有相交边。

    3.平面图中所有的面都是三角面,且所有三角面的合集是散点集V的凸包。

    在实际中运用的最多的三角剖分是Delaunay三角剖分,它是一种特殊的三角剖分。先从Delaunay边说起:

    【定义】Delaunay边:假设E中的一条边e(两个端点为a,b),e若满足下列条件,则称之为Delaunay边:存在一个圆经过a,b两点,圆内(注意是圆内,圆上最多三点共圆)不含点集V中任何其他的点,这一特性又称空圆特性。

    【定义】Delaunay三角剖分:如果点集V的一个三角剖分T只包含Delaunay边,那么该三角剖分称为Delaunay三角剖分。

    【定义】假设T为V的任一三角剖分,则T是V的一个Delaunay三角剖分,当前仅当T中的每个三角形的外接圆的内部不包含V中任何的点。

    0336c2e665cd282e18ea50dc20adb588.png

    如图,将离散点联结成Delaunay三角形

    算法

    关于Delaunay三角形的算法,有翻边算法、逐点插入算法、分割合并算法、Bowyer-Watson算法等。

    而在这几种算法中,逐点插入算法比较简单、易懂,在本文中只针对该算法进行讨论,该算法也是目前使用最为广泛的Delaunay算法。

    在该算法中,主要应用Delaunay三角形【定义4】,理解下来就是每一个三角形的外接圆圆内不能存在点集内的其它任何一点,而有时候会出现点在外接圆上的情况,这种情况被称为“退化”。

    在文章里对该方法进行了分析,并提出了伪代码思路:

    subroutine triangulate

    input : vertex list

    output : triangle list

    initialize the triangle list

    determine the supertriangle

    add supertriangle vertices to the end of the vertex list

    add the supertriangle to the triangle list

    for each sample point in the vertex list

    initialize the edge buffer

    for each triangle currently in the triangle list

    calculate the triangle circumcircle center and radius

    if the point lies in the triangle circumcircle then

    add the three triangle edges to the edge buffer

    remove the triangle from the triangle list

    endif

    endfor

    delete all doubly specified edges from the edge buffer

    this leaves the edges of the enclosing polygon only

    add to the triangle list all triangles formed between the point

    and the edges of the enclosing polygon

    endfor

    remove any triangles from the triangle list that use the supertriangle vertices

    remove the supertriangle vertices from the vertex list

    end

    其方法虽然可实现三角化,但是效率还是不太高

    在看过

    优化后的伪代码为:

    input: 顶点列表(vertices)                      //vertices为外部生成的随机或乱序顶点列表

    output:已确定的三角形列表(triangles)

    初始化顶点列表

    创建索引列表(indices= new Array(vertices.length))    //indices数组中的值为0,1,2,3,......,vertices.length-1

    基于vertices中的顶点x坐标对indices进行sort         //sort后的indices值顺序为顶点坐标x从小到大排序(也可对y坐标,本例中针对x坐标)

    确定超级三角形

    将超级三角形保存至未确定三角形列表(temp triangles)

    将超级三角形push到triangles列表

    遍历基于indices顺序的vertices中每一个点//基于indices后,则顶点则是由x从小到大出现

    初始化边缓存数组(edge buffer)

    遍历temp triangles中的每一个三角形

    计算该三角形的圆心和半径

    如果该点在外接圆的右侧

    则该三角形为Delaunay三角形,保存到triangles

    并在temp里去除掉

    跳过

    如果该点在外接圆外(即也不是外接圆右侧)

    则该三角形为不确定//后面会在问题中讨论

    跳过

    如果该点在外接圆内

    则该三角形不为Delaunay三角形

    将三边保存至edge buffer

    在temp中去除掉该三角形

    对edge buffer进行去重

    将edge buffer中的边与当前的点进行组合成若干三角形并保存至temp triangles中

    将triangles与temp triangles进行合并

    除去与超级三角形有关的三角形

    end

    大多数同学看过伪代码后还是一头雾水,所以用图来解释这个过程,我们先用三点来做实例:

    b5d8db15ff8755b9e17fbdf3761506d1.png

    如图,随机的三个点

    e3addc9afdf7802c7a918ba3ae3d821d.png

    根据离散点的最大分布来求得随机一个超级三角形(超级三角形意味着该三角形包含了点集中所有的点)

    我的方法是根据相似三角形定理求得与矩形一半的小矩形的对角三角形,扩大一倍后则扩大后的直角三角形斜边经过点(Xmax,Ymin)

    但是为了将所有的点包含在超级三角形内,在右下角对该三角形的顶点进行了横和高的扩展,并要保证这个扩展三角形底大于高,才能实现包含

    这样求得的超级三角形不会特别大使得计算复杂,而且过程也简单,并将超级三角形放入temp triangles中

    12eee33d00020885294b7570c533d624.png

    接下来就像是伪代码中描述的那样,对temp triangle中的的三角形遍历画外接圆,这时先对左边的第一个点进行判断,其在圆内

    所以该三角形不为Delaunay三角形,将其三边保存至edge buffer中,temp triangle中删除该三角形

    0cb3253946d94b58e55d9c6b8733f5ea.png

    将该点与edge buffer中的每一个边相连,组成三个三角形,加入到temp triangles中

    8e430335e8de7c4f1b73629220b33af4.png

    再将重复对temp triangles的遍历并画外接圆,这时使用的是第二个点来进行判断

    该点在三角形1外接圆右侧,则表示左侧三角形为Delaunay三角形,将该三角形保存至triangles中

    该点在三角形2外接圆外侧,为不确定三角形,所以跳过(后面会讲到为什么要跳过该三角形),但并不在temp triangles中删除

    该点在三角形3外接圆内侧,则这时向清空后的edge buffer加入该三角形的三条边,并用该点写edge buffer中的三角边进行组合,组合成了三个三角形并加入到temp triangles中

    3c8ea7724c9aac1611e471fc3c995b55.png

    再次对temp triangles进行遍历,这里该数组里则含有四个三角形,一个是上次检查跳过的含有第一个点的三角形和新根据第二个点生成的三个三角形

    该点在三角形1外接圆右侧,则该三角形为Delaunay三角形,保存至triangles中,并在temp triangles中删除

    该点在三角形2外接圆外侧,跳过

    该点在三角形3外接圆内侧,将该三边保存至temp buffer中,并在temp triangles中删除

    该点在三角形4外接圆内侧,将该三边保存至temp buffer中,并在temp triangles中删除

    这时,temp buffer 中有六条边,triangles中有两个三角形,temp triangles中有1个三角形

    对temp buffer中的六条边进行去重,得到五条边,将该点与这五条边组合成五个三角形并加入到temp triagnles 中,这时temp triangles中有6个三角形

    d63b70fe588960cfbddadc0b19ed55fd.png

    由于三个点已经遍历结束,到了不会再对第三个点形成的三角形做外接圆,这时则将triangles与temp trianlges合并,合并后的数组表示包含已经确定的Delaunay三角形和剩下的三角形

    这时除去合并后数组中的和超级三角形三个点有关的所有三角形,即进行数组坐标的限定,则得到了最后的结果:

    5b0b4e3e1b830167e0aa62075ee47ad9.png

    这是用最少的三个点来做讲解,点数越多的话计算量会越大,但是都是在上面步骤下进行的。

    问题

    在用点对三角形外接圆位置关系进行判断的时候,为什么点在外接圆的右侧的话可以确定该三角形是Delaunay三角形

    而当点外接圆的外侧且非右侧时,为什么要路过三角形,不把该三角形确定为Delaunay三角形呢?

    首先,我们在开始的时候对原始方法进行优化时,我们增加了一个indices数组来操作vertices,并对indices依据vertices的x坐标进行了从小到大的排序

    则我们在后面遍历点时是从点集的最左侧开始的,如图:

    53cf5da655477504be43f993a999e3cc.png

    当遍历下一个点时,该点在外接圆的右侧,则表示以后所有的点都在该外接圆的右侧,则保证了Delaunay三角形的空圆特性

    而当点在外接圆外,并非外接圆右侧时,如图:

    7f540fe602f9c72187bc04eedd041c63.png

    在该三角形的外切圆中,当遍历到点1时,符合在外侧的条件,但是不能确定后面所有的点都保持在外接圆外侧

    如果说该三角形就为Delaunay三角形的话,如图中的点2及后面可能出现的点很有可能出现在圆内,而使该三角形被按边分解

    在我们的算法中,如果碰到在点在外侧且非右侧的话,会跳过,该三角形一直在temp triangles中被检验,直到碰到下一个点在圆内或圆右才会从temp triangles中去除,进行后面的操作

    而当点在圆上时,也是根据在圆内的方法对其进行操作,实际情况中会出现这种情况,上文也讲过,称为“退化”。

    最后,附一张delaunay的随机demo图:

    1ac570068b5ce782a5d1058c8e6ae645.png

    The end.

    展开全文
  • PolygnalRender 三角形剖分算法-总结|实现|使用-1[TOC]Lowpoly​ 2D绘制​ 破坏动态产生前言1、这里的类别为程序化部分, 我所理解的程序化就是能在引擎中用代码产生的资源.(但这个定义就有点大, 就这样吧)2、这里...
  • 空间平面内任意多边形的三角剖分算法 保存stl模型后分析
  • Delauny三角剖分算法解析及源码

    千次阅读 2014-11-04 09:30:06
    delauny三角剖分算法解析及源码
  • 平面三角剖分算法

    热门讨论 2012-09-27 23:23:39
    平面三角剖分的经典算法,很多三维绘图都运用了此原理来构图,将图形划分为很多的小三角形,从而构造出三维物体
  • amp;fps=1二维三角剖分技术...下面说一下三维曲面的三角剖分:曲面剖分通常有两种方法,其一是将点投影到某一平面,运用平面的三角剖分算法完成剖分,而三维点问连接关系不变,这种方法将三维问题转化为平面问题,...
  •    如何把一个散点集合剖分成不均匀的三角形网格,这就是散点集的三角剖分问题,散点集的三角剖分,对数值分析以及图形学来说,都是极为重要的一项预处理技术。该问题图示如下:    1.1. 三角剖分定义   ...
  • 单调多边形的三角剖分是计算几何的一个重要分支,其中严格单调多边形的三角剖分已有了 线性时间算法,但该算法对于一般单调多边形还不能给出正确的剖分....法进行了详细分析,给出了一般单调多边形的三角剖分算法.
  • 2D三角剖分算法

    2012-11-02 15:04:54
    2D离散点数据的直接剖分算法,效果好,运行速度较快!10K个点大约需要不到20s!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 600
精华内容 240
关键字:

三角剖分算法