一种基于随机粒子的涡旋流场动态可视化方法

文档序号:10489161阅读:268来源:国知局
一种基于随机粒子的涡旋流场动态可视化方法
【专利摘要】本发明公开了一种基于随机粒子的涡旋流场动态可视化方法,通过在流场随机生成粒子,并赋予粒子生命长度,让粒子随着流场速度矢量的变化而不断运动形成移动轨迹,表现涡旋闭合流场的流线特征。本发明算法简单、计算速度快,视觉效果生动,适用于涡旋等其他流场现象的动态可视化。
【专利说明】
一种基于随机粒子的涡旋流场动态可视化方法
技术领域
[0001]本发明涉及一种基于随机粒子的涡旋流场动态可视化方法,属于海洋数据可视化领域。
【背景技术】
[0002]流场是海洋研究中重要的物理场,如大气中的风,海洋中的流等都是众多海洋动态现象(涡旋、潮汐、浪、锋面等)的重要驱动力。流场数据通常采用向量场的数据结构,记录每个采样点上水平U(玮向)和垂直V(经向)方向上的速率。由于流场数据本身并不能直观地反映流场每个位置上的速度大小和方向,因此如何有效生动地对流场数据进行可视化,表现中尺度涡在流场上的闭合环流特征,对于认识和研究涡旋的演变演化过程具有重要的研究意义。
[0003]目前,流场矢量数据可视化的方法主要有四种(陈为等,2013):1)标记法,通常采用带箭头的线段来表示速度的方向和大小;2)积分曲线法,采用各种积分曲线对流场中的迹线、流线和脉线进行可视化;3)纹理法,采用点噪声法(V a n W i j k,19 91)或线积分卷积(Cabral,1993)生成流场的纹理特征;4)拓扑法,通过提取和标绘几何或拓扑特征,如临界点、分界线和拓扑区域,来视觉化流场数据。
[0004]现有的这些方法,由简到繁,从不同的生动程度表现了流场矢量数据,但却难以让用户直观地感受到流场本身的运动变化,特别是涡旋内部流场闭合环流的特征。为此,本发明提出一种基于随机粒子的涡旋流场动态可视化方法,通过在空间上随机生成有限数量的粒子,让粒子随着流场的空间变化而不断运动,来模拟表现涡旋闭合流场的动态特征。

【发明内容】

[0005]本发明解决的技术问题:提供一种基于随机粒子的涡旋流场动态可视化方法,该方法通过在空间上随机产生有限数量的虚拟粒子,让粒子跟随流场的空间变化而不断的运动,形成逐渐消失的尾迹效果,来反映流场矢量数据的动态特征,特别是涡旋内部闭合流场的特征,本发明简单、计算速度快,视觉效果生动,适用于涡旋等其他流场现象的动态可视化。
[0006]本发明的技术方案:一种基于随机粒子的涡旋流场动态可视化方法包括如下步骤:
[0007]步骤1、根据实际用户需求,在空间上生成N*N的规则格网,遍历每个格网;N*N的规则格网,可以取100*100;
[0008]步骤2、在格网内随机生成一个粒子,并赋予粒子指定或随机的寿命值;
[0009]步骤3、根据粒子所在的空间位置(x,y),搜索流场矢量数据中最邻近的四个采样点,通过双线性插值内插出粒子的U、V速率值;
[0010]步骤4、在定时执行函数(如JavaScript的setTimeout()函数)中,设定帧率(秒/帧),并依序执行以下函数:[ΟΟ?1 ] ?渐隐(fadeout)函数,对之前所绘制的粒子轨迹作微透明化处理;
[0012]?演进(evolve)函数,若粒子已到自身的寿命长度,则重新在粒子生成的格网内随机产生一个新的粒子;否则,根据帧率R、U、V计算粒子下一个时刻的空间位置,并根据新的空间位置按步骤3更新粒子的U、V速度值,最后粒子年龄值加一,更新粒子速度值的计算如下:
[0013]xt = x+U*R
[0014]yt = y+V*R
[0015]其中,(xt,yt)为下个时刻粒子的位置坐标,(x,y)为粒子当前位置的坐标,U和V分别是当前粒子所在流场位置的水平和垂直速率值,R为帧率;
[00? 0] 籲绘制(draw)函数,绘制从当前位置到下一时刻位置的直线,更新粒子的空间位置。
[0017]所述步骤2中赋予粒子指定或随机的寿命值的计算如下,
[0018]x = xo+size*random();
[0019]y = yo+size*random();
[0020]age =max_age氺random();
[0021]其中,(x,y)为粒子生成的随机位置,(XQ,yQ)为格网的起始点位置,size为格网的长度大小,age为粒子的随机寿命值,max_age为用户设定的粒子最大生命值,randomO为产生[0,1]区间任意值的随机函数。
[0022]所述步骤3中通过双线性插值内插出粒子的U、V速率值如下,
[0023]dy = Po0.y-P1.y
[0024]dx = Po1.x-Po0.x
[0025 ] vo = P1.z* (Po0.y-y) / dy+Po0.z* (y - P1.y) /dy
[0026]Vi = Pn.z*( Po1.y-y) / dy+Poi.z* (y_Pii.y) /dy
[0027]V = vo* (Po1.x-x)/dx+vl*(x-Po0.x)/dx
[0028]其中,PQQ,P1,Poi,Pu为最邻近的四个采样点,每个采样点均含有(x,y,z)三个属性值。Po0.X,Po0.y即采样点Pqq的X,y坐标值,Pqq.z即采样点Pqq的U或V速率值。插值点的坐标由X,y单独表示。dx,dy分别表示四个采样点在X,y方向上的间隔距离。vo表示Pqq和P1在y轴上的速率线性插值分量,Vi表不Poi和Pii在y轴上的速率线性插值分量,V表不vo和Vi在X轴上的速率线性插值。
[0029]所述步骤4中定时执行函数中依序执行渐隐(fadeout)函数对粒子过往轨迹消隐处理,演进(evolve)函数更新粒子位置及生命属性,和绘制(draw)函数更新粒子移动轨迹。
[0030]本发明与现有技术相比的优点在于:
[0031](I)本发明利用随机生成的粒子模拟其在流场数据中的流动,从而反映流场的速度分布,与传统方法相比,更好地体现了流场的运动性特征,视觉效果更佳。
[0032](2)本发明通过在空间上随机产生有限数量的虚拟粒子,让粒子跟随流场的空间变化而不断的运动,形成逐渐消失的尾迹效果,来反映流场矢量数据的动态特征,特别是涡旋内部闭合流场的特征,,本发明简单、计算速度快,视觉效果生动,适用于涡旋等其他流场现象的动态可视化。
【附图说明】
[0033]图1为本发明的主流程图;
[0034]图2为双线性内插方法示意图。
【具体实施方式】
[0035]如图1所示,本发明的具体实施步骤如下:
[0036]步骤1、根据实际用户需求,在空间上生成N*N的规则格网,遍历每个格网。
[0037]步骤2、在格网内随机生成一个粒子,并赋予粒子指定或随机的寿命值,计算如下,
[0038]x = xo+size*random();
[0039]y = yo+size*random();
[0040]age =max_age氺random();
[0041]其中,(x,y)为粒子生成的随机位置,(XQ,yQ)为格网的起始点位置,size为格网的长度大小,age为粒子的随机寿命值,max_age为用户设定的粒子最大生命值,randomO为产生[0,1]区间任意值的随机函数。
[0042]步骤3、根据粒子所在的空间位置(x,y),搜索流场矢量数据中最邻近的四个采样点Poo、Po1、P1Q、Pu,如图2所示,通过双线性插值内插出粒子的水平速度分量U和垂直速度分量V,计算如下,
[0043]dy = Po0.y-P1.y
[0044]dx = Po1.x-Po0.x
[0045 ] zo = P1.z* (Po0.y-y) / dy+Po0.z* (y - P1.y) /dy
[0046] Zi = Pn.z*(Po1.y-y) / dy+Poi.z* (y_Pii.y) /dy[0047 ] z = zo* (Poi.χ-χ) / dx+zi* (x - Po0.x) /dx
[0048]其中,PQQ,P1,Poi,Pu为最邻近的四个采样点,每个采样点均含有(x,y,z)三个属性值。Po0.X,Po0.y即采样点Pqq的X,y坐标值,Pqq.z即采样点Pqq的U或V速率值。插值点的坐标由X,y单独表示。dx,dy分别表示四个采样点在X,y方向上的间隔距离。zo表示Pqq和P1在y轴上的速率线性插值分量,Zi表不Poi和Pii在y轴上的速率线性插值分量,z表不zo和Zi在X轴上的速率线性插值。
[0049]步骤4、在定时执行函数(如JavaScript的setTimeout()函数)中,设定帧率(秒/帧)R,并依序执行以下函数:
[0050]?渐隐(fadeout)函数,对之前所绘制的粒子轨迹做微透明化处理,以HTML实现为例,粒子轨迹均绘制在Canvas对象上,在更新粒子轨迹(即粒子新的位置)之前,在Canvas上放置相同空间范围的白色填充的透明化矩形,透明度可设为90%,使之前绘制的粒子轨迹颜色减退,随着透明化矩形的不停叠放,此前绘制的粒子轨迹将随着透明度的降低而逐渐消隐至无;
[0051]?演进(evolve)函数,若粒子已到自身的寿命长度,则采用步骤2的方法重新在粒子生成的格网内随机产生一个新的粒子;否则,根据帧率R、U、V计算粒子下一个时刻的空间位置,并根据新的空间位置按步骤3更新粒子的U、V速度值,最后粒子年龄值加一,更新粒子速度值的计算如下:
[0052]xt = x+U*R
[0053]yt = y+V*R
[0054]其中,(xt,yt)为下个时刻粒子的位置坐标,(x,y)为粒子当前位置的坐标,U和V分别是当前粒子所在流场位置的水平和垂直速率值;
[0055]?绘制(draw)函数,绘制从当前位置到下一时刻位置的直线,更新粒子的空间位置。
[0056]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本邻域的技术人员来说,本发明可以更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
【主权项】
1.一种基于随机粒子的涡旋流场动态可视化方法,其特征在于步骤如下: 步骤1、根据实际用户需求,在空间上生成N*N的规则格网,遍历每个格网; 步骤2、在格网内随机生成一个粒子,并赋予粒子指定或随机的寿命值; 步骤3、根据粒子所在的空间位置(x,y),搜索流场矢量数据中最邻近的四个采样点,通过双线性插值内插出粒子的U、V速率值; 步骤4、在定时执行函数中,设定帧率,并依序执行以下函数: ?渐隐(f adeout)函数,对所绘制的粒子轨迹作微透明化处理; ?演进(evolve)函数,若粒子已到自身的寿命长度,则重新在粒子生成的格网内随机产生一个新的粒子;否则,根据帧率、U、V计算粒子下一个时刻的空间位置,并根据新的空间位置更新粒子的U、V速度值,并且年龄值加一; ?绘制(draw)函数,绘制从当前位置到下一时刻位置的直线,更新粒子的空间位置。2.根据权利要求1所述的基于随机粒子的涡旋流场动态可视化方法,其特征在于:所述步骤2中赋予粒子指定或随机的寿命值的计算如下,x = xo+size*random();y = yo+size*random();age=max_age*random(); 其中,(x,y)为粒子生成的随机位置,(XQ,yo)为格网的起始点位置,Size为格网的长度大小,age为粒子的随机寿命值,max_age为用户设定的粒子最大生命值,random()为产生[0,1]区间任意值的随机函数。3.根据权利要求1所述的基于随机粒子的涡旋流场动态可视化方法,其特征在于:所述步骤3中通过双线性插值内插出粒子的U、V速率值如下,dy = Po0.y-P1.ydx = Po1.x_Po0.Xvo = P1.z* (Po0.y-y)/dy+Po0.z*(y-P1.y)/dyVi = Pn.z*(Po1.y-y)/dy+Po1.z*(y-Pn.y)/dyv = vo*(Po1.x-x)/dx+vl*(x-Po0.x)/dx 其中,Pqq,P1Q,Pq1,Pu为最邻近的四个采样点,每个采样点均含有(X,y,z)三个属性值;Po0.X, Po0.y即采样点Pqq的X,y坐标值,Pqq.z即采样点Pqq的U或V速率值;插值点的坐标由x,y单独表示;dx,dy分别表示四个采样点在X,y方向上的间隔距离;νο表示Pqq和P1在y轴上的速率线性插值分量,Vi表示Poi和Pu在y轴上的速率线性插值分量,V表示VQ和Vl在X轴上的速率线性插值。4.根据权利要求1所述的基于随机粒子的涡旋流场动态可视化方法,其特征在于:所述步骤4中定时执行函数中依序执行渐隐(fadeout)函数对粒子过往轨迹消隐处理,演进(evolve)函数更新粒子位置及生命属性,和绘制(draw)函数更新粒子移动轨迹。5.根据权利要求1所述的基于随机粒子的涡旋流场动态可视化方法,其特征在于:所述步骤I中N*N的规则格网可以取100*100。
【文档编号】G06F17/50GK105844036SQ201610191465
【公开日】2016年8月10日
【申请日】2016年3月30日
【发明人】易嘉伟, 杜云艳, 周成虎
【申请人】中国科学院地理科学与资源研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1