颜色与点图标方法的可视化

2015-03-16 09:53黄晶慧
电脑知识与技术 2015年1期

黄晶慧

摘要:该文将颜色映射与点图标映射方法相结合,最终实现了旋风分离器速度场可视化。为寻求设备中的物质的运动规律,需要将速度场表示出来。点图标方法是最简单最直观的矢量场映射方法,虽然矢量的方向可以被直观、准确的表示,但用图标的大小表示矢量的大小,极易产生视觉混乱,在旋风分离器内的速度场可视化中,将点图標映射方法与颜色映射相结合,使用VC++与OpenGL成功实现了旋风分离器内的速度场可视化。

关键词:点图标;颜色映射;旋风分离器; 矢量场可视化

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2015)01-0153-04

Visualization of Both Arrow Plot Mapping and Color Mapping

HUANG Jing-hui

(Computer Science Department of Fujian Radio&TV University, Fuzhou 350003, China)

Abstract: This paper focuses on intensively study in Visualization of Vector Field in order to realize Vector Field Visualization of the Cyclone Separator. The algorithms that combining both arrow plot mapping and color mapping was applied to realize Velocity field Visualization of The Cyclone Separator. In order to find the rule of flow ,velocity vector should be imaged. The most simple and obvious way to visualize a velocity field is arrow plot mapping arithmetic. However, the output imaging was confusable. Arrow plot mapping arithmetic with color was applied to Velocity field simulation of The Cyclone Separator. Using VC++ and OpenGL the perfect output imaging was obtained.

Key words: Arrow Plot; Color Mapping;Cyclone Separator; Velocity Field Visualization

1 概述

基于几何图形的点图标映射方法是传统的点图标映射方法,这种方法中,矢量的大小和方向是由带有大小和方向的图形进行映射的,另外,为了增加真实感,可以使用光照或深度显示的方法进行处理。基于几何图形的映射方法在各种矢量场可视化方法中是最简单的。其中,常用的几何图形有刺状图标、有向线段、椎体等等。这些图形的方向与矢量的方向相同,矢量的大小与图形的长度成正比。几何图形的映射方法只能应用于二维矢量场,由于用于表示三维矢量场时,方向上会存在二义性(因为此种方法没有法失、光照等三维相关信息而只有投影)。针对这种情况,我们用圆锥实体来表示矢量可以很好的解决。其中,锥顶的方向表示矢量的方向,锥底圆心为采样点的坐标位置,再加上光照效果就可以很好的将矢量的三维方向信息表示出来。圆锥底面的半径用来表示矢量的大小。这样整个矢量场会充斥着大小差异不同的圆锥,使人们视觉上产生混乱的感觉。所以,虽然这种方法可以消除方向的二义性,但无法细致全面的反应出整个矢量场。

2 基于颜色的点图标映射方法

旋风分离器是广泛使用的一种设备,其内部是气固两相高速旋转的流体,它的作用是实现流体的气固两相分离。为了寻求旋风分离器内部流体的运动规律,一个有效的方法就是将分离器内部流体的速度矢量绘制出来。传统的图形绘制方法无法直观形象地表示流场,是因为将速度矢量(场中一截面的矢量数据)在切向、轴向、径向方向的分量单独绘制。

颜色是最容易被人们理解的元素之一,人眼大约可以对128种色彩和35万种颜色进行分辨,所以在很多可视化中,颜色的作用是非常重要的,在矢量场可视化中,可以将矢量的大小映射为颜色值,但矢量的方向信息要如何表示才不会丢失呢?我们将颜色映射方法与点图标方法相结合,用颜色值表示矢量大小,用点图标的方向表示矢量的方向。运用OpenGL对矢量设置了光照和材质,产生出逼真的易懂的三维立体图标,最终清晰细致的可视出整个矢量场。

2.1 图元的选取及映射

矢量的方向由实体箭头的方向表示,使用实体圆柱与实体圆锥组合成为实体箭头作为矢量场可视化的图元,实体箭头的颜色值映射为矢量的大小。如图1所示,程序中相应的是Carrow类的定义。

2.2 颜色映射算法

选取红色(Red)、黄色(Yellow)、绿色(Green)、青色(Cyan)、蓝色(Blue),这5种基本颜色的RGB彩色模型。为了表示矢量的大小,我们采用线性插值方法,在5种基色之间得到了30种不同的过渡颜色,将这些过渡颜色映射为速度矢量的大小。最大矢量值[Vmax]对应为红色,最小矢量值[Vmin]对应为蓝色,如图2所示,为了能够准确的表示出不同矢量在矢量场的具体分布情况,我们使用了五种基本颜色之间的跨度来表示具体的矢量,例如纯蓝与纯绿之间的跨度,对于采集的数据比较密集的空间,为了可以准确的将采集的差别细微的数据表示为可以人眼辨别的颜色值的变化,我们定义的颜色跨度要尽量小。颜色映射的步骤如下:

首先,在选取基色的基础上,根据采集的实际数据确定颜色跨度,生成过渡颜色。

然后,计算与颜色域值对应的矢量数据域值。场中最小的矢量值[Vmin](即[VBlue])以及最大的矢量值[Vmax](即[VRed]),分别对应颜色值[CBlue]与[CRed],然后插值得出[CCyan]、[CGreen]、[CYellow]對应的矢量阈值[VCyan]、[VGreen]、[VYellow]。

计算场中每点的颜色值C

2.3 具体实现步骤

颜色与点图标方法的具体实现包括:箭头类的定义;读取矢量场采样点矢量数据文件并给赋值;颜色映射算法实现;旋转参数的计算与传递;箭头的最终构造完成;速度场所有采样点绘制;最终结果展示。

关键代码:

//箭头类的定义

class CArrow : public CObject

{public:

double vt,vz,length,angle;//切向和轴向的速度分量,速度矢量大小,倾斜角度

CArrow();

void SetValue1(float X,float Y,double VT,double VZ);

virtual ~CArrow();

};

//矢量数据读取与赋值

fp1=fopen("D:\\VT1B.dat","r");

fp2=fopen("D:\\VZ1B.dat","r");

if(fp1!=NULL&&fp2!=NULL)//给切向速度赋值

{for( i=0;i

{…}

fclose(fp1);

for( i=0;i

{…}

if(length>=0.27)// 颜色映射算法实现

glColor3f(1.0,1.0-(length-0.27)/0.13,0.0);

else

if(length>=0.2)

glColor3f((length-0.2)/0.07,1.0,0.0);

// 旋转参数的计算与传递

static GLfloat m_y=0.0f;

glRotatef(m_y,0.0f,-1.0f,0.0f);

y-=vz/200.0;

glTranslatef(0.0f,y,0.0f);

if(y<-1.2)

y=1.2;//*/

if(m_rotation){

m_y+=0.005;//箭头的旋转

}

//箭头的最终构造完成

glPushMatrix();

glTranslatef(0.0f,0.25-1.0,0.0f);//将圆柱下端移动到原点

auxSolidCylinder(0.008,0.25);//绘制圆柱

glPopMatrix();

auxSolidCone(0.035,0.05);//绘制圆椎

glPopMatrix();

//所有采样点绘制

int CShowerView::OnCreate(LPCREATESTRUCT lpCreateStruct)

{if (CView::OnCreate(lpCreateStruct) == -1)

return -1;

m_pDC = new CClientDC(this); //初始化OpenGL和设置定时器

SetTimer(1, 20, NULL);

InitializeOpenGL(m_pDC);

if (pDoc→endread)

{//最终结果展示

int num;

for(num=0;num<10;num++)

{glVertex3f(-2.2,1.31-num*0.09,0.0);

glColor3f(1.0,(float)(num/9.0),0.0);

glVertex3f(-1.9,1.31-num*0.09,0.0);

}

glEnd();

for(num=0;num<6;num++)

{glVertex3f(-2.2,-0.04-num*0.09,0.0);

glColor3f(0.0,1.0,(float)(num/5.0));

glVertex3f(-1.9,-0.04-num*0.09,0.0);

}

glEnd();

for(num=0;num<9;num++)

{glVertex3f(-2.2,-0.58-num*0.09,0.0);

glColor3f(0.0,(1.0-(float)num/8.0),1.0);

glVertex3f(-1.9,-0.58-num*0.09,0.0);

}

glEnd();

::SwapBuffers(m_pDC→GetSafeHdc()); //渲染场景

2.4 实验结果

将基于颜色映射的矢量场映射方法应用于旋风分离器中的速度矢量场,所得可视化结果如图3所示,该结果图像直观形象地表示出了速度矢量场中一截面上采样点的速度方向及大小信息。

3 总结与展望

本文将颜色映射与点图标映射方法相结合对旋风分离器速度场可视化进行了研究,最终清晰细致地可视出了旋风分离器内的速度场。实现了旋风分离器内的速度场可视化,借助三维矢量场可视化方法,使用OpenGL設置光照和材质,产生具有真实感的三维立体图标,最终可视出了旋风分离器内的速度场。动态可视化是当今矢量场可视化的一个发展趋势,今后的一个研究目标之一就是矢量场动态可视化方法的研究,使其成为我们科研和工程建设中有力的工具。

参考文献:

[1] B. Cabral and L. C. Leedom. Imaging vector ?elds using line integral convolution. In Proceedings of ACM SIGGRAPH 09, pages 263-270, 2009.

[2] 5. W. Cai and P.-A. Heng. Principal stream surfaces. In IEEE Visualization 10, pages 75-80,2010.

[3] M. W. Hirsch. Differential Topology, 6th Ed.Berlin, Springer, 1997.

[4] S. Lang. Differential and Riemannian Manifolds,3rd Ed. New York, Springer, 1995.

[5] A. Sundquist. Dynamic line integral convolution for visualizing stream-line evolution. IEEE Transactions on Visualization and Computer Graphics, 9(8):273-282, 2003.

[6] J. Grant, G. Erlebacher, and J. J. OBrien.Case study: visualization of thermoclines in the ocean using Lagrangian-Eulerian timesurfaces. In IEEE Visualization 02, pages 529-532, 2002.

[7] B. Jobard, G. Erlebacher, and M. Hussaini.Lagrangian—Eulerian advection for unsteady ?ow visualization. IEEE Transactions on Visualization and Computer Graphics, 8(3):211-222,2002.

[8] R. Blake and S.-H. Lee. Temporal structure in the input to vision can promote spatial grouping. In Biologically Motivated Computer Vision 2000, pages 635-653, 2000.

[9] 李海生. 三维数据场可视化的带权限定Delaunay三角化的理论和应用研究:[博士学位论文]. 北京航空航天大学,北京:2002.

[10] A. Sundquist. Dynamic line integral convolution for visualizing stream-line evolution. IEEE Transactions on Visualization and Computer Graphics, 9(8):273-282, 2003.

[11] 李海生,牛文杰,杨钦,陈其明. 矢量场可视化的研究现状与发展趋势[J].计算机应用研究, 2001(8).