Captain Dialog 2009-09-18
三维建模和等值面的绘制过程中,需要经常使用三角形网格对数据体进行构面。而三角形的生成基于Delaunay三角剖分的算法实现的。前段时间一直在考虑数据体的任意剖面切割该怎么做,但是一直被两个问题所困扰,一个就是交点问题,然后就是对所求交点进行绘制问题(三角形网格面构造)。终于在半个月后有了一点收获。
1 Delaunay三角剖分原理
三角剖分算法可以分为针对二维的局部剖分和三维的全局剖分算法。在二维情况下建立的基于简单的三角形构面的方式,而三维情况下则是需要建立基于四面体的方式构造空间曲面。在遇到三维空间散乱点的构面问题时,可以直接采用三维Delaunay剖分,亦可先将三维坐标预处理转换到二维坐标系中,间接的采用二维Delaunay剖分算法。想着用最简单的方式实现功能的时候,就选择了第二种方式。
关于二维的Delaunay三角剖分原理,文献资料相当多,随便一搜就是一大堆,网上也有很不错的介绍:
Delaunay三角剖分(Delaunay Triangulation)相关知识:http://www.cnblogs.com/soroman/archive/2007/05/17/750430.html
[图形算法]Delaunay三角剖分算法 :http://www.cnblogs.com/renliqq/archive/2008/02/06/1065399.html
关于生成三角形网格的算法也是很多,我选择了稍微老套点的生长法,实现起来还算是思路清晰。
2 三维空间散乱点Delaunay三角剖分程序实现
这个过程中,我们首先需要实现的就是三维坐标向二维坐标的转换。参数化的方程组求解可以参考: