三角网生成学习总结

差不多学习20天了,看了这么长时间,该总结一下了,主要分为两部分:离散点生成三角网,多边形剖分三角网。总结的都是二维的,对于三维,鉴于现在的需求不会太复杂,我的打算是投影成二维后三角化再还原到三维。

注:算法名称带+的是我编译运行过的,相关代码下载地址

一、     不带约束的算法

主要就是离散点生成三角网算法,比较成熟的有delaunay三角化算法,还有些其他的。delaunay三角化按照实现过程,可以分为分治法,逐点插入法(随机增量法),三角网生长法,扫描线法等。

搜集到的例子:

l  Paul Chew算法+

Paul Chew写的Voronoi Diagram / Delaunay Triangulation,采用java语言,效果不错

网站:http://www.cs.cornell.edu/Info/People/chew/Delaunay.html

l  CompuGeom+

核心算法不知道谁写的,最开始是c代码,有人改为了c++代码,程序的about页面写的作者邮箱为[email protected]。师姐给的,效率和效果都超好,已经修改使用,作为两步法带约束剖分的第一步代码,哈哈~

没有官网,给个可以下载代码的地方,注意验证码大小写哦:

http://www.hackchina.com/cont/67300

代码 debug版运行时的 assert可以不用管,程序不是用 mfc的窗口, assert失败正常。

2012-03-30:原来没仔细看,实际上是两个slide控件的问题,已修正。

l  其他的

没查……

 

二、     带约束的算法

带约束的我刚刚开始就为了多边形剖分三角网,后面又增加了其他需求,什么断层啊,采空区啊。。。。

l  Poly2Tri+

Poly2Tri采用的是Sweep Line方法,同时提供javalinux版本。输入输出官方是采用了文件格式。

网站:http://sites-final.uclouvain.be/mema/Poly2Tri/poly2tri.html

已经使用,效果挺好的,效率也不错,但是有重复点的时候不能用。但生成的并不是delaunay三角形,也就是说可能有很瘦长的三角形产生。

可以处理空洞。

l  Triangle+

Trianglelinux下的,编译看了下结果还可以,不过没去做移植,评价挺好的。有时间一定好好看看。

网站:http://www.cs.cmu.edu/~quake/triangle.html

可以处理空洞,也可以指定约束线,或者关键点。

l  FIST

FISTFast Industrial-Strength Triangulation of Polygons)看网站上展示的效果不错,不过源码不公开,可以跟作者索取。

网站:http://www.cosy.sbg.ac.at/~held/projects/triang/triang.html

l  Ratcliff的算法

John W. Ratcliff的算法

网站:http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml

bug,如果是五个顶点,其中四个是正方形顶点,第五个是对角线上点的时候,会有问题。

l  Sjaak Priester算法

作者的网站:

http://www.sjaakpriester.nl/computers/codeguru

代码介绍及下载:

http://www.codeguru.com/cpp/cpp/algorithms/general/article.php/c8901/Delaunay-Triangles.htm

但是我用着有问题,比如六个点安照两个嵌套三角形布置,有待研究代码。网站也说是The algorithm is not perfect. In particular, it doesn't handle situations with more than three vertices lying on one circle very well.

l  周林算法+

名字我自己起的,是周波和林俞先两位同学写的,也是师姐给我的代码,有些bug,在某些情况下会产生空洞,我做了修改,但是效率很一般。

注:修改版需顺时针画边界点

唯一一个我完完全全懂了每行代码意思的,并且运行正常了的算法……囧

原版处理了空洞,修改版没处理空洞

l  TriGrid

刚刚写总结的时候发现的,还没仔细看,保留下网站。

http://trigrid.sourceforge.net/

l  Sunny CG算法+

这是我在CompuGeom(CG)算法基础上,增加第二步约束处理做出来的,CG的效率很好,所以就算我的烂算法影响下还能接受使用。

单独下载地址:http://code.google.com/p/szmneo/downloads/detail?name=SunnyCG_vs08.rar&can=2&q=

暂未处理空洞

2012-03-30:增加了空洞和内部关键点的处理,外部边界需要逆时针画,空洞需要顺时针画,关键点需要在空洞和外边界间。

2012-03-31:修复了边界相交和某些情况有空洞的bug

l  其他算法

1)复杂多边形的剖分,首先对多边形进行单调划分,也就是将多边形分解为若干个单调多边形,然后再对单调多边形进行三角剖分,最终生成对初始多边形的三角剖分。

http://www.cnblogs.com/dogstar/archive/2011/04/07/2008726.html

2)也是采用扫描线法,但是在构网过程中添加了好多点,生成的三角形可能会很碎很扁:

http://www.cnblogs.com/fly-height/articles/2193155.html

三、     其他资料

1)几个比较大的库,有时间可以研究下:

Qhull:http://www.qhull.org/

Cgal: http://www.cgal.org/

2)罗列了一堆mesh generators软件的网页:

http://www.robertschneiders.de/meshgeneration//software.html

3)前人的总结,本文只提到了里面的TrianglePoly2Tri以及FIST

http://blog.csdn.net/yqxx/article/details/6318679

你可能感兴趣的:(三角网生成学习总结)