内容发布更新时间 : 2024/12/23 23:28:06星期一 下面是文章的全部内容请认真阅读。
Ply文件格式是一个简单的对象描述,为了方便那些与多边形模型打交道的研究人员,它被设计为一种简单格式。这种文件格式的早期版本是用于斯坦福大学和北卡教堂。
和例子中描述一样,PLY文件格式的代码可以从http://astronomy.swin.e du.a u/~p bour ke/ geom form ats/ ply
下载。
4.2.3 stl文件
Stl或stereolithography格式是一个用于制造业的ASCII或者是二进制文件。它包含了一个三角形表面的列表,并且描述了计算机产生的固体模型。对于大多数快速原型机来说这是一个非常标准的输入文件。
Stl文件格式描述能够在网上许多地方找到,可以参考http://www.sdsc.edu/tmf/ Stl- spe cs/stl.html 。下面
是一个例子。
solid ...
facet normal 0.00 0.00 1.00 outer loop
vertex 2.00 2.00 0.00 vertex -1.00 1.00 0.00 vertex 0.00 -1.00 0.00 endloop endfacet ...
Endsolid
4.2.4 .mesh文件
.mesh是编辑一个交互式三维网格显示程序的的文件格式,可以参考http://www.ann.jussieu.fr/~ fre y/lo gici els/ medi t.h tml。在medit文档中有关于这个文件格式的描述。
用户可以http://www- rocq1.inria.fr/ gamm a .免费下载这种文件格式的3D模型。
4.3 文件格式例子
这一节提供了两个例子。他们是用来支持交互式学习。关于PLCs的焦点是通过命令行来使用tetgen.poly文件格式和构造不同的网格质量标准。
4.3.1 有两个边界标识符的PLC
图19展示了一个矩形条的几何图形。这个bar由八个顶点和六个面组成(面都是矩形)。另外,三是两个边界标识符(-1和-2)分别于最左边和最右边的面相关。这个简单的物理模型有它简单物理意义。它可以被看作为一个简单的热量转移问题。这个任务是计算bar的温度扩散,热量从bar热的一边传到冷的一边。两个边界标识符代表不要的边界条件,一个是高温一个是低温。下面这个bar.poly输入文件描述了这个bar:
# Part 1 - the node list.
# A bar with 8 nodes in 3D, no attributes, no boundary marker. 8300
# The 4 leftmost nodes:
1000 2200 3220 4020
# The 4 rightmost nodes: 50012 62012 72212 80212
# Part 2 - the facet list.
# Six facets with boundary markers. 61
# The leftmost facet.
1 0 -1 # 1 polygon, no hole, boundary marker (-1) 4 1234
# The rightmost facet.
1 0 -2 # 1 polygon, no hole, boundary marker (-2) 4 5678
# Other facets. 1
4 1562 # bottom side 1
4 2673 # back side 1
4 3784 #top side 1
4 4851 # front side # Part 3 - the hole list. # There is no hole in bar. 0
# Part 4 - the region list. # There is no region defined. 0
命令行可以如下选择:PLC的第一个网格(-p),然后强加质量约束(-q)。这样将会在三个文件中生成一个网格质量。分别为bar.1.node, bar.1.ele, and bar.1.face
tetgen –pq bar
下面是输出文件bar.1.node。它包含47个点。为了满足质量标准,tetgen会自动添加一些额外的点。
47300 1 000 2 200 3 220 4 020 5 0012 6 2012 7 2212 8 0212
9 1.0000469999999999 0 0 10 0 0.999668 0
11 0 0.99944500000000003 12
12 1.000594 0 12 ...
# Generated by tetgen -pq bar
Here is the output file “bar.1.ele”, which contains 83 tetrahedra. 83 4 0
1 18332034 292325 3 17182034 4 43321837 5 19203033 6 14411342 7 122676 8 102819 9 28331834 10 35 41 38 45 11 10 9 25 28 12 3251930 ...
# Generated by tetgen -pq bar
下面是输出文件bar.1.face。它包含了90个边界面。面1和面2是最左边的面,因此有标识符-1;面3与面4有标识符-2表明它们是最右边的面。其他的面都有默认的标识符0.
90 1 13410-1 21093-1 3 7 12 11 -2 47118-2 5 1837 430 6 2446 390 726670 8 3522 240 929780 10 39 7 29 0 11 29 11 27 0 12 23 45 38 0 ...
# Generated by tetgen -pq bar
然而,对用有限元法或者是有限体积法来进行数值模拟的话,上面的网格可能太粗糙。Tetgen运行时可以
用-q 或者 –a选项,或者两个选项同时使用,此时将产生更密的网格质量。
tetgen -pq1.414a0.1 bar
Tetgen产生了一个包含330个顶点和1092个四面体的网格。这些多出来的点是由于我调用了-q和-a选项。
要想看到关于网格的质量报告,可以输入下面命令: > tetgen -rNEFV bar.1
4.3.2 有两个区域的PLC区域
下面的例子中,我们在bar的里面添加了一个内部边界面,以致于在bar上创建了两个区域(区域由这个新添加的面分割开来)。图20 展示了这个改变的几何图形。这个bar由12个节点和七个面组成(注意这些面当中有些已经不再是单一的多边形)。另外,此时已经定义了两个区域,它们分别带有区域属性-10和-20.物理上,我们可以两个区域赋予不同的材质。上一个例子中的两个边界标识符仍然存在。下面是bar2.poly文件,它描述了这个修改后的bar:
# Part 1 - the node list.
# The model has 12 nodes in 3D, no attributes, no boundary marker. 12300
# The 4 leftmost nodes: 1000 2200 3220 4020
# The 4 rightmost nodes: 50012 62012 72212 80212
# The 4 added nodes: 9003 10 2 0 3 11 2 2 3 12 0 2 3
# Part 2 - the facet list.
# Seven facets with boundary markers. 71
# The leftmost facet.
1 0 -1 # 1 polygon, no hole, boundary marker (-1) 4 1234
# The rightmost facet.
1 0 -2 # 1 polygon, no hole, boundary marker (-2) 4 5678
# Each of following facets has two polygons, which are # one rectangle (6 corners) and one segment. 2
6 1956102# bottom side 2910 2
6 21067113# back side 21011 2
6 31178124#top side 21112 2
6 4128591# front side 2129
# The internal facet separates two regions. 1
4 9 10 11 12
# Part 3 - the hole list.
# There is no hole in bar. 0
# Part 4 - the region list.
# There are two regions (-10 and -20) defined. 46 2
1 1.0 1.0 1.5 -10 0.1 2 1.0 1.0 5.0 -20 -1
这个“tetgen -pqaA bar2”命令产生了bar2.1.ele文件。下面列出了这个文件的前八行。它和bar.1.ele是不同的,每一行记录都增加了一个区域属性。
431 4 1
1 32575060-20 2 51235049-20
3 88 138 116 149 -10 4 76969536-20 5 29555652-20
6 132 138 88 139 -10 7 65 138 132 139 -10 8 16545315-20 ...
# Generated by tetgen -pqaA bar2
生成的网格的可视化之后,我们可以看到这个经过优化后的区域-10,它是比其他的地方要密。这是因为
bar2.poly文件中定义了体积约束,并且使用了-aA选项。
5 其他程序调用tetgen
除了被用作一个独立的程序之外,tetgen也可以被其他程序调用。Tetgen库提供了函数与数据结构。使用tetgen库的一个好处是它能够被其他程序重复调用而不会覆盖输入或者输出的文件。这个特征对一些应用程序非常有用,像合适的有限元法和有限体积法。
这个章节给出了使用tetgen库一些必要的说明。包含的例子有助于更好的理解。用户要想能够使用tetgen的话,需要知道他的命令选项和输入输出文件格式。第二节包含了怎么把tetgen编译成一个库的介绍。
5.1 头文件
所有调用tetgen的程序必须包含头文件tetgen.h #include \
Tetgen库包含了所有的数据类型和函数声明。更特别的是,它定义了函数tetrahedralize()和数据类型tetgenio,这个两个是提供给用户调用tetgen的接口。在5.2节和5.3节将有介绍。
5.2 调用规则
函数tetrahedralize()声明如下:
void tetrahedralize(char *switches, tetgenio *in, tetgenio *out)