在已经有几种技术能够从网格中删除裂片。Tetgen做了一个简单的裂片消除步骤。裂片能够通过一些局部的翻转操作消除,或者从边界剥离。这个策略在删除大部分的裂片是非常有效的,单不能保证把所有的都消除。在将来上面提到的一些方法是值得去实现。
1.3.1 半径边缘比质量衡量标准
在著作中有一些质量衡量标准是可以利用的。这一部分从它的算法实现介绍了tetgen使用的质量衡量方法。 一般来说,对于一些精确的有限元建模,元素的形状有边界纵横比是有必要的。一个元素的纵横比是最大边长度和最小高度的比列。对于判断这个网格划分的质量来说,值当然是越小越好。例如“瘦与扁平”的四面体趋向有一个大的纵横比。
一个类似的但是较弱的网格划分质量评价依据是半径边缘比,它是miller,talmor,teng,walkington和wang提出的。一个四面体t有一个唯一的外接球。我们令R=R(t)为半径,L=L(t)为最短边的长度。这个四面体的半径边缘比Q=Q(t)是:
半径边缘比用来衡量这个四面体的质量。对于所有质量好的四面体来说,这个值是小的(见图10),但对于大部分形状不好的四面体来说,这个值比较大(见图11)。因此,在一衡量一个网格划分的质量时,这个值应该是越小越好。然而,这个比例是被这个规则的四面体最小化了,也就算说:
一种划分形状比较糟糕的四面体特殊情况是这个裂片(见图12),它是非常扁平并且差不多快退化了。裂片的半径边缘比能够小至到0.707.此时这个半径边缘比作为衡量裂片的依据已经不合适了。然而,miller,talmor,teng,walkington,和wang 已经指出对于分析这个德洛内优化算法来说它仍然是最自然和优雅的依据。
Q=R/L
Q >=
2、 入门指南
Tetgen的最新版本是可以从 ——————————————下载。Tetgen的发布版本在它的源代码中已有说明(用C++写的),它在使用时需要先被编译。这个代码具有高度可移植性,只需要支持标准的C++库即可。编译环境为主流的32为或64位系统。章节2.1会介绍怎么在unix/linux和windows系统中把tetgen编译成一个可执行程序。
当你获取这个可执行文件时,你可以用它包含的例子测试一下tetgen,下面是这个教程。
Tetgen没有图形用户接口。Tetview程序可以显示tetgen的输入输出文件。当然,还有一些其他比较流行
的网格显示器,详细可以看章节2.3。
2.1 编译
下载的内容应该包含下列文件
Readme License
说明
版权说明
tetgen库头文件
Tengen.h Tetgen.cxx
tetgen库C++源代码 几何谓词C++源代码
Predicates.cxx
Makefile 编译tetgenmakefile文件 Example.poly 一个实例数据文件
文件predicates.cxx是一个shewchuk型的精确几何谓词文件(c++版本)。
要编译tetgen,系统应该用C++编译器,在unix/linux上可以用G++,在windows系统上可以用microsoftC++或者是BorlandC++。Tetgen可以编译成一个可执行程序或者是一个可以嵌入到其他程序的库。
2.1.2 unix/linux
编译tetgen最容易的方法是编辑和使用它包含的makefile文件。在编译之前,把所有的源文件和makefile放到一个目录下。可以读一下这个makefile,它描述了一些用户选项,然后你可以根据这些选项编辑它。你应该设置你的C++编译器和优化层次。当你做完这些之后,输入make命令把tetgen编译成一个可执行程序或者输入make tetlib命令把tetgen编译成一个库。编译后会在同一个目录下产生可执行文件tetgen和库文件libtet.a
二者你可以选择其中一个方式,这些文件在没有makefile的情况下通常也很容易编译。只要你会用G++,
首先你可以先编译这个predicates.cxx文件生成一个对象文件:
g++ -c predicates.cxx
把tetgen编译成一个可执行文件的命令如下:
g++ -O -o tetgen tetgen.cxx predicates.o –lm 把tetgen编译成库文件的命令如下:
g++ -O -DTETLIBRARY -c tetgen.cxx ar r libtet.a tetgen.o predicates.o
2.1.2 windows9x/NT/2000/xp
在win32系统,tetgen可以编译成控制台程序tetgen.exe或者编译成一个库tetgen.lib。这个已经用microsoft visual C++6.0做过测试。编译tetgen最容易的方法就是用VC++的集成开发环境。 建立tetgen.exe的步骤:
建立一个名为tetgen的win32控制台程序 把所有源文件添加到工程中
编译工程
建立tetgen库的步骤:
建立一个名为library的win32 static library 把所有源文件添加到工程中 添加tetlibrary符号到编译开关中 编译工程
2.2 测试
如果没有参数的话,Tetgen会给出一个简短的命令行选项列表。-h选项表示打印出使用方法。 Tetgen –h
这个封装的示例文件,example.poly,是一个简单的三维分段线性复合体。用tetgen实验一下: Tetgen –p example
Tetgen将会读入这个复合体,然后把它的约束德洛内四面体剖分结果写入到文件example.1.node,example.1.ele,和example.1.face,文件内容分别是网格顶点列表,四面体列表和边界面列表。Tetgen典型的输出文件如下:
Opening example.poly.
Constructing Delaunay tetrahedralization. Delaunay seconds: 0.02 Creating surface mesh. Perturbing vertices. Delaunizing segments. Constraining facets.
Segment and facet seconds: 0.02 Removing unwanted tetrahedra. Hole seconds: 0
Repairing degenerate tets. Steiner seconds: 0
Writing example.1.node. Writing example.1.ele. Writing example.1.face. Output seconds: 0
Total running seconds: 0.04 Statistics:
Input points: 54 Input facets: 29 Input holes: 0 Input regions: 0 Mesh points: 79
Mesh tetrahedra: 188 Mesh faces: 453 Mesh subfaces: 154 Mesh subsegments: 106
如果需要获取这个复合体四面体网格质量,可以输入以下命令: Tetgen -pq example
这个结果正如之前一样结果输出在上面提到的三个文件中。但是这一次,它有四面体网格质量限制,这些四
面体有外接圆半径与最短边比,比列限制为2.0。现在开始运行: Tetgen -pq1.414V example
Tetgen将再一次产生网格质量,此时将比之前包含更多的点,并且所有有半径边缘比的四面体其比例限定为1.414。另外,tetgen打印出了一个大概的网格质量报告(由于使用了-V开关)。它看出来如下:
Mesh quality statistics:
Smallest volume: 0.0085019 | Largest volume: 115.27 Shortest edge: 0.30902 | Longest edge: 15.287
Smallest dihedral: 5.0167 | Largest dihedral: 169.2909 Radius-edge ratio histogram: < 0.707 : 6 | 1.6 - 1.8 : 130 0.707 - 1 : 238 | 1.8 - 2 : 64 1 - 1.1 : 85 | 2 - 2.5 : 0 1.1 - 1.2 : 94 | 2.5 - 3 : 0 1.2 - 1.4 : 222 | 3 - 10 : 0 1.4 - 1.6 : 145 | 10 - : 0
(A tetrahedron’s radius-edge ratio is its radius of circumsphere divided by its shortest edge length) Aspect ratio histogram:
1.1547 - 1.5 : 0 | 15 - 25 : 13 1.5-2 : 0 | 25-50 : 3 2 - 2.5 : 0 | 50 - 100 : 0 2.5 - 3 : 10 | 100 - 300 : 0 3 - 4 : 209 | 300 - 1000 : 0 4 - 6 : 607 | 1000 - 10000 : 0 6 - 10 : 115 | 10000 - 100000 : 0 10 - 15 : 27 | 100000 - : 0
(A tetrahedron’s aspect ratio is its longest edge length divided by the diameter of its inscribed sphere) Dihedral angle histogram:
0 - 5 degrees: 0 | 90 - 100 degrees: 310 5 - 10 degrees: 25 | 100 - 110 degrees: 206 10 - 30 degrees: 340 | 110 - 120 degrees: 173 30 - 40 degrees: 263 | 120 - 130 degrees: 100 40 - 50 degrees: 251 | 130 - 140 degrees: 46 50 - 60 degrees: 100 | 140 - 150 degrees: 23 60 - 70 degrees: 5 | 150 - 170 degrees: 43 70 - 80 degrees: 4 | 170 - 175 degrees: 0 19
80 - 90 degrees: 79 | 175 - 180 degrees: 0
如果要计算这个PLC点集的德洛内四面体剖分和凸壳,输入一下命令: cp example.poly example.node tetgen example
德洛内四面体保存在example.1.node 和 example.1.ele文件中。凸壳是被文件example.1.face中三角形列表代表。所有的网格和德洛内四面体都能够在下一节介绍中的程序中显示出来。 章节3和4 是关于命令行的开关和文件格式的详细描述
2.3 可视化 2.3.1 tetview
Tetview是用来显示复合体和简单化网格的图形接口。它是特意为tetgen创造的,它能够读入tetgen的输入和
输出文件并且显示这个对象。它也显示了一些其他的信息,像边界类型和材质。这个交互式图形用户接口允许用户通过鼠标或键盘轻易地操作这个显示对象。Tetview也可以将当前窗口的内容保存到高质量格式的文件。 Tetview是一款免费软件,你可以找到不同平台上的编译可执行的版本。在你的系统上下载一个相适应的即可。 如果要显示example.poly PLC,首先把tetview的可执行文件复制到到你的文件目录中,输入如下命令,它将自动载入:
tetview example.poly
下面的命令将显示文件example.1.node,example.1.ele, and example.1.face中网格。 tetview example.1
tetview的使用说明可以在以上网站中找到
2.3.2 其他的网格显示器
其他两个程序可以被选择用来显示由tetgen生成的网格,并且都是免费可用和运行在主流 操作系统上。他们是:
Medit,一个界面非常友好的网格显示器 Gid
在用medit显示网格时,在命令行添加 –g开关。Tetgen将另外输出一个网格文件,它只能直接被medit读入和渲染。命令如下:
Tetgen -pg example.poly medit example.1
通过在命令行开启-g开关,tetgen将会产生另外两个额外的文件。它们分别是四面体网格文件和表面网格文件。这些文件能够被Gid显示。
3.使用tetgen
这个章节描述了tetgen作为一个标准独立程序的使用方法。它被命令行的开关选项集和输入文件调用。开关用来设置控制tetgen的行为,并且设置输出文件格式。依据不同的的开关选项,tetgen将会产生德洛内四面体剖分,或者是边界约束的德洛内四面体剖分,或者是是网格质量。
3.1 命令行语法
运行tetgen的命令行语法如下:
tetgen [-pq__a__AriYMS__T__dzjo_fe ngG OJBN EFIC QVvh ] input_file
下划线表明选项后面可以跟数值,也可以不跟。在选项和数字参数之间不要留空格。章节3.2将介绍这些开关选项。