APP下载

火箭发动机喷流辐射场可视化

2013-09-21乔要宾朱定强郑才浪

图学学报 2013年6期
关键词:等值线等值云图

乔要宾, 朱定强, 郑才浪

(北京航空航天大学宇航学院,北京 100191)

科学可视化的目标是把由实验或数值计算获得的大量数据转变成人的视觉可以感受到的计算机图像[1]。通过可视化技术,将探测或计算得到的火箭发动机喷流辐射场数据进行处理,得到等值线,云图和等值面等计算机图像,可以对火箭发动机喷流辐射场有直观、形象和全面的理解。这对于导弹目标探测、识别研究和突防技术研究等具有十分重要的意义。

可视化技术虽然发展时间较短,但是随着计算机技术的迅速发展,可视化技术也发展迅速,目前已经广泛应用于医学、地理、气象、航天、军事等领域。等值线和云图是流场可视化的重要方法,目前常用的等值线的绘制算法有网格追踪法,网格序列法等,云图的填充算法有四叉树算法,局部填充法等。

网格跟踪法是通过给定等值线的一个起始点,计算求出该点相邻的下一个等值点,重复计算直至等值线完成[2]。网格序列法是对网格进行自上而下自左向右逐一提取,并寻找和处理该网格内对应的等值点和线段,在处理完所有的网格单元后,就自然生成了数据场的等值线分布[3]。但是网格追踪法算法复杂,通用性差,不易编程。网格序列法存在等值线拓扑连接的二义性。

四叉树算法基本思想是基于网格无限细分,根据矩形网格顶点值以矩形颜色块来填充[4]。

但是该算法要想获得光滑的云图边界,计算量太大。局部多边形填充法的基本思想是[5]:在每个小矩形中按照填充颜色的级别将网格矩形单元分割为多个多边形,然后用相应的颜色进行填充,在进行网格范围内的循环完成整个区域的填充。但是该方法需要讨论多达 12种情况,太过繁琐,而且划分的多边形也不是最简多边形。

本文采用将网格的矩形单元划分为4个三角形的方法,对网格序列法和局部多边形填充法进行了改进,结合OpenGL实现了火箭发动机喷流辐射场的等值线和云图的绘制,同时导入 3DS格式的火箭发动机三维模型,利用OpenGL的三维显示技术与辐射云图结合进行3D显示。

1 网格数据预处理

无论是等值线,云图还是等值面的绘制,首先要对数据文件进行读取并对数据进行网格化处理。例如某火箭发动机40km高度的喷流辐射场数据是由程序计算,并按照 Tecplot软件的数据格式进行输出得到,其具体文件格式如下:

前3行为文件头,包含文件标题,数据变量名称和X,Y,Z坐标的个数。第4行开始为数据部分,第一列为X坐标,第二列为Y坐标,第三列为Z坐标,第四列为坐标点的数据值(如温度,辐射亮度等)。

针对上述 DAT格式的文件,首先设置结构体读取文件头信息:

读取了文件头后,就需要定义结构体对文件数据进行存储和网格化:

结构体FileData中包含了网格点的坐标值(x,y,z)和辐射亮度(v)。

2 等值线绘制和云图的填充

2.1 等值点的查找

对流场数据进行网格化后,整个流场数据就是由一系列的矩形网格单元组成。如图1所示,连接4个顶点和中心点,就可以将矩形网格划分为4个三角形网格。

定义 FileData a[m_x*m_y*m_z]存储网格数据,并保存数据中的最大值和最小值,通过等值线的数目N来计算需要显示的等值线值序列,存储于数组fv[N]中。定义FileData Ma存储矩形网格单元中心点的数据。

图1 矩形单元三角化

假设矩形网格4个顶点的数据为fv1,fv2,fv3,fv4,网格中心点的坐标值及数值可以通过式(1)插值求得:

对于划分后的三角形,首先要进行等值点的查找。通过式(2)可以由两个顶点值(fv1,fv2)和等值点的值fv判断该边上是否有等值点:

满足式(2)表示该边有等值点。假设等值点坐标为(p.x, p.y, p.z),两个顶点坐标分别为(p1.x,p1.y, p1.z)、(p2.x, p2.y, p2.z),则利用式(3)-(5)进行线性插值,得到等值点坐标,并保存。

在插值计算时,为了避免等值线从网格顶点经过,即等值点与网格顶点重合的情况发生,可以在插值计算前对网格顶点值与等值线值进行比较,如果两者相等,则对网格顶点值进行微量偏移。

2.2 颜色线性表

要实现填充云图,首先建立一张基于线性变化的颜色查找表,建立颜色与物理量(标量)之间线性的一一对应关系。

颜色的选定,影响到渲染效果,为了使系统能够将数据的变化有层次的显示出来,所以颜色表定义范围要足够大[6]。人们的视觉感官上将颜色分为3个色调:冷色、中性色、暖色。其中冷色包括蓝、青;中性色包括绿、紫;暖色包括红、橙、黄[3]。在RGB模式下,我们可以通过调节R、G、B分量的比重,来构成这些颜色[7]。为了满足层次鲜明的需要,颜色线性表包含3个色调,颜色表从冷色到暖色线性分布。

颜色线性表的颜色各个分量(R, G, B),具体分布如图2所示。

其中,红色线条表示红色分量R的变化规律,绿色线条表示绿色分量G的分布规律,蓝色线条表示蓝色分量B的分布规律。R,G,B的值都随对应物理量的变化而变化(从0到1)。

图2 各个颜色分量的分布图

颜色线性表的结果如图3所示,按物理量从最大值到最小值线性划分为 12个值域,对应从红到蓝 12种颜色。在进行云图填充时就可以按照物理量所在的值域,从颜色线性表选取对应的颜色进行填充。

图3 物理量——颜色线性映射方法

2.3 等值线的绘制

遍历整个网格,将矩形单元格逐一划分为4个三角形,对三角形的三条边进行插值。等值线从网格单元内经过,有一个进口就肯定有一个出口,所以等值点的数只可能是偶数[8],而且对于三角形来说,一条等值线与其交点的个数只能为0或 2。所以插值得到三角形三条边上的等值点坐标,将这两个等值点坐标连接起来就形成了三角形内的一条等值线。按照fv[N]中等值线值的存储顺序,逐一插值就可以得到三角形内全部等值线。具体算法如下:

1) 首先提取一个矩形单元格,将其分割为4个三角形网格。

2) 提取一个三角形网格,由式(2)判断 3条边上是否有等值线。如果没有,直接提取下一个三角形。否则进行下一步。

3) 从等值线值数值fv[N]中提取一个值,根据式(3)计算三角形三条边上的等值点坐标,然后将其直接连接,并根据等值线的值从颜色线性表中选取对应的颜色赋给该等值线。

4) 从fv[N]中提取下一个值重复步骤3,直至所有的等值线都绘制完毕。

根据以上步骤可以绘制完成一个三角形内的等值线,处理完4个三角形后就可以得到矩形单元格内的等值线,遍历整个流场的所有网格后就可以完成整个流场的等值线绘制。

2.4 云图填充

对于每个三角形,按照其顶点标量值的大小将顶点排序,最大值顶点为A,最小值顶点为C,中间值顶点为B。如果有等值线经过,三角形内部等值线的分布情况可分为3种情况,如图4所示。

图4 三角网格内等值线分布情况

分别沿着ABC和AC两条路径计算等值点坐标,记录每条边上的等值点个数,假设AB上有m1个等值点,BC上有m2个等值点,因为每条等值线在三角形内有一个进口,就有一个出口[8],所以AC上等值点个数n就等于m1+m2。记ABC路径上的等值点为P11,P12,…,P1n;AC路径上的等值点为P21,P22,…,P2n。然后将三角形顶点与等值点所构成的多边形按照顺序依次进行填充,就可以得到三角形内的云图。具体算法步骤如下:

1) 首先提取一个矩形单元格,将其分割为四个三角形网格。

2) 提取一个三角形网格,对其3个顶点按标量值的大小进行排序,由大到小为A,B,C。

3) 根据顶点值进行判断三角形内是否有等值线经过(即根据式(2)判断AC上是否存在等值点),如果没有等值线经过,则根据顶点值的大小,从颜色线性表中选取对应的颜色填充整个三角形。否则进行下一步。

4) 分别沿着ABC和AC两条路径计算等值点坐标,记录每条边上的等值点个数,假设AB上等值点数为m1,BC上等值点数为m2,AC上等值点个数n=m1+m2。记ABC路径上的等值点为P11,P12,…,P1n,AC路径上的等值点为P21,P22,…,P2n。

5) 根据m1,m2的值判断等值线的分布情况。如果m2=0,即图4中(a)所示的情况,则依次填充多边形AP11P21,P11P21P22P12,…,P1nP2nCB;如果m1=0,即图4中(b)所示的情况,则依次填充多边形ABP11P21,P11P21P22P12,…,P1nP2nC;如果m1,m2都不为零,即图4中(c)所示的情况,则先依次填充多边形AP11P21,P11P21P22P12,…,P1nP2nC,然后填充三角形BP1m1P1m1+1。

根据以上步骤处理完4个三角形网格后即得到三角形内的云图,重复步骤2到步骤5即可完成矩形单元格内的云图填充,然后遍历所有的单元格就可以得到整个流场的云图。

2.5 算法实现实例

在VC++6.0环境下,结合OpenGL,利用上述将矩形网格三角化的方法编制的可视化软件,实现的火箭发动机喷流辐射场的辐射亮度等值线图和云图,如图5~图7所示。

图5 辐射亮度等值线图

图6 火箭发动机喷流辐射亮度云图

图7 局部辐射亮度云图

3 火箭发动机3D模型的导入

为了增强可视化软件的显示效果,需要将火箭发动机的3D模型与其喷流辐射场的云图结合显示。但是直接用OpenGL的图元绘制命令进行复杂的建模不太现实,所以本文采用专业的建模软件SolidWorks进行建模,然后利用软件Deep Exploration将模型转化为 3DS格式的文件,在VC++6.0环境下编写程序读取3DS文件数据,再利用OpenGL对模型进行绘制交互控制。

3.1 3DS文件的导入

3DS文件有许多块组成,至今为止,没有任何一个官方文件完全说明3DS的文件格式,但是我们可以忽略掉那些不管兴趣或未知的块,只在程序中读入我们需要的块[9],表1中列举了3DS文件中一些主要的块。

表1 3DS模型文件中几个主要的块ID及信息

一般情况下,3DS文件中对象块、颜色块和材质信息是最重要的,对三维模型的绘制起着决定性的作用,我们在可视化程序中定义一个类CLoad3DS来读入3DS文件,在这个类中,主要有两个函数处理 3DS文件::Load3DS()(打开3DS文件,并根据块ID选择需要的块进行读取),ObjCalcNormals()(计算面和点的法向量)。CLoad3DS类主要用来读取3DS文件中的数据信息并计算面和点的法向量,将这些数据存储在自己定义的数据结构中。这些数据可以直接用OpenGL进行重绘。

CLoad3DS类中定义的数据模型源码如下:

3.2 模型的重绘

读取了模型数据后,可以用OpenGL编写程序对模型进行重绘。

首先利用OpenGL绘制基本图元的函数对模型进行绘制,3DS模型是由一系列的三角面组成的,根据模型结构体存储的顶点信息和对应的法向量与纹理信息,利用 GL_TRIANGLES(三角形图元模式)就可以将一系列的三角面绘制出来,添加材质纹理,就可以绘制出3DS模型。模型重绘的源码如下:

绘制完模型后,还要进行光照的设置,在CView类的初始化函数中加入代码:

来开启光照,在绘制模型的时候,OpenGL就可以根据模型的材质纹理和表面各点法向量对模型进行渲染,可以使模型具有3D的显示效果。

4 程序结果

在VC++6.0环境下,利用本文所述的算法,结合OpenGL编写的可视化软件,绘制云图并导入3DS模型,实现了火箭发动机模型与喷流辐射场云图的结合显示,如图8所示。

图8 喷管模型与辐射场云图结合3D显示效果

为了更好的显示三维流场的辐射云图,在可视化软件中添加绘制了一个可控制移动的圆形径向截面云图和圆柱形的流场表面透视图,结合3D火箭发动机喷管模型达到3D显示效果。

5 结 论

1) 用将矩形网格分成4个三角形的方法,对网格序列法和局部多边形填充法进行了改进,基于三角网格进行等值线的绘制和填充,实现了火箭发动机喷流辐射场的等值线和云图的绘制。

2) 针对3DS文件的格式,编写程序导入了3DS格式的三维模型数据,利用OpenGL对模型进行重绘,完成了火箭发动机喷管3D模型的导入。

3) 液体火箭发动机喷流形成的激波处温度较高,辐射亮度值也相应较大。如图5和图7所示,云图能够清晰的显示出辐射场的激波,说明利用本文所述算法得到的辐射场云图能够很好的喷流辐射亮度的分布规律。

[1]唐卫清, 刘慎权, 余盛明, 李 华. 科学计算可视化[J].软件世界, 1996, 5:74-77.

[2]郭新奇, 严建钢, 杨士锋, 沈赔志. 基于 VC++的等值线追踪与填充算法[J]. 兵工自动化, 2011, 30(4):81-84.

[3]姚丽娇. 科学计算中的标量场可视化技术[D]. 辽宁:东北大学, 2009.

[4]王家华, 黄本宇. 油气藏等值线图跟踪和填充算法[J]. 特种油气藏, 2006, 13(6): 95-98.

[5]庞世明, 蔡玉华, 靳文芳. 等值线图的彩色填充方法[J]. 计算机应用, 2004, 24(1): 60-62.

[6]吕 珍. 基于 OpenGL的流场数据可视化技术[D].武汉: 武汉理工大学, 2007.

[7]Shreiner D. OpenGL编程指南(第7版)[J]. 北京: 机械工业出版社, 2009, 113-121.

[8]爨 莹, 朱航洲. 一种新的等值线绘制方法研究[J].图像与多媒体, 2012, 31(3): 46-49.

[9]李 新, 李珊珊. 3ds模型在OpenGL中的读取和重绘[J]. 首都师范大学学报(自然科学版), 2008, 29(2):101-104.

猜你喜欢

等值线等值云图
一种基于IDW 的等值线、等值面前端生成方法
基于规则预计格网的开采沉陷等值线生成算法*
异步电动机等值负载研究
基于GeoProbe地球物理平台的软件等值线追踪算法研究与软件开发
成都云图控股股份有限公司
天地云图医药信息(广州)公司
基于共同题非等组设计的等值结果评价标准研究综述
黄强先生作品《雨后松云图》
“等值线”的数学特征及其应用
云图青石板