2.3 流场图绘制
流体运动所占据的空间称为流场。流场图能以更加立体的方式显示多维数据之间的内在联系和变化趋势。本节介绍了4个流场图绘制函数。
2.3.1 coneplot——流锥图
【功能】 绘制流锥图。
【语法介绍】
● coneplot(X,Y,Z,U,V,W,Cx,Cy,Cz) 用圆锥体绘制速度向量图,圆锥体指向速度向量的方向,其长度与速度向量的大小成比例。(X(i),Y(i),Z(i))定义三维向量场的坐标;(U(i),V(i),W(i))定义三维向量场。数组X,Y,Z,U,V,W的大小、单调性和三维特征必须相同(如由meshgrid产生);(Cx,Cy,Cz)定义向量场中圆锥体的位置。
● coneplot(U,V,W,Cx,Cy,Cz) 等 价 于 coneplot(X,Y,Z,U,V,W,Cx,Cy,Cz),其 中, [X,Y,Z]=meshgrid(1:n,1:m,1:p),[m,n,p]=size(U)。
● coneplot(...,s) 设定圆锥体的显示比例s,以使它们能够匹配图形的大小。默认值s=1;若s=0,则不自动设置圆锥体的比例。
● coneplot(...,color) 在向量场中进行color数组的插值,然后根据插值确定圆锥体的颜色。数组color的维数必须与数组U,V,W的维数相同。
● coneplot(...,'quiver') 绘制箭头代替绘制圆锥体。
● coneplot(...,'method') 指定圆锥的位置插值的方法。method取值为linea(r 线性插值)、cubic(三次插值)和nearest(最小距离插值),默认为线性插值。
● coneplot(X,Y,Z,U,V,W,'nointerp') 不将圆锥的位置插值到区域中。
● coneplot(axes_handle,...) 在句柄为axes_handle的轴上绘制流锥图。
● h=coneplot(...) 返回绘制圆锥体的阴影对象句柄给h。
【实例】 绘制流锥图。
>> %导入数据 load wind xmin = min(x(:)); xmax = max(x(:)); ymin = min(y(:)); ymax = max(y(:)); zmin = min(z(:)); %绘制流锥图 daspect([2,2,1]) %设置坐标轴数据比例 xrange = linspace(xmin,xmax,8); yrange = linspace(ymin,ymax,8); zrange = 3:4:15; [cx cy cz]=meshgrid(xrange,yrange,zrange); %生成单调的网格数据 hcones=coneplot(x,y,z,u,v,w,cx,cy,cz,5); %绘制流锥图,如图2.93所示
图2.93 绘制流锥图
set(hcones,'FaceColor','red','EdgeColor','none') %添加立体边框 hold on wind_speed = sqrt(u.^2 + v.^2 + w.^2); hsurfaces = slice(x,y,z,wind_speed,[xmin,xmax],ymax,zmin); set(hsurfaces,'FaceColor','interp','EdgeColor','none') hold off %设置坐标轴 axis tight; view(30,40); axis off camproj perspective; camzoom(1.5) %给场景添加灯光 camlight right; lighting phong set(hsurfaces,'AmbientStrength',.6) set(hcones,'DiffuseStrength',.8)
2.3.2 streamline——流线图
【功能】 绘制流线图。
【语法介绍】
● streamline(X,Y,Z,U,V,W,startx,starty,startz) 绘制三维数组U,V,W的流线图。(X,Y,Z)是单调的网格数据(如由 meshgrid 函数生成的数据),表示(U,V,W)的坐标;(startx,starty,startz)定义流线的起点位置。
● streamline(U,V,W,startx,starty,startz) 等价于streamline(X,Y,Z,U,V,W,startx,starty,startz),其中,[X,Y,Z]=meshgrid(1:N,1:M,1:P),[M,N,P]=size(U),即[M,N,P]为U的大小。
● streamline(X,Y,Z) 绘制流线图。参量X,Y,Z由stream3函数产生(stream3函数用于产生三维流线数据)。
● streamline(X,Y,U,V,startx,starty) 绘制矩阵 U,V 的流线图。(X,Y)为(U,V)的坐标;(startx,starty)定义流线的起点位置。
● streamline(U,V,startx,starty) 等价于 streamline(X,Y,U,V,startx,starty),其中,[X,Y]=meshgrid(1:N,1:M),[M,N]=size(U),即[M,N]为矩阵U的大小。
● streamline(X,Y) 绘制流线图。参量X,Y由stream2函数产生(stream2函数用于产生二维流线数据)。
● streamline(...,options) 参量option为绘制流线时所用的选项,为标量或二元向量,当option为标量时,表示流线的步长。当option为二元向量时,表示流线的步长和最大值。
● streamline(axes_handle,...) 在句柄为axes_handle的轴上绘制流线图。
● h=streamline(...) 返回流线句柄向量h,向量中的每个元素代表一个流线。
【实例】 绘制流线图。
>>%导入数据 load wind [sx,sy,sz]=meshgrid(80,20:10:50,0:5:15); %生成单调的网格数据 %绘制流线图,如图2.94所示 h = streamline(x,y,z,u,v,w,sx,sy,sz); set(h,'Color','red')
图2.94 绘制流线图
2.3.3 streamtube——流管图
【功能】 绘制三维流管图。
【语法介绍】
● streamtube(X,Y,Z,U,V,W,startx,starty,startz) 绘制三维数组 U,V,W 的流管图。(X,Y,Z)是单调的网格数据(如由 meshgrid 函数生成的数据),表示(U,V,W) 的坐标;(startx,starty,startz)定义流管的起点位置。
● streamtube(U,V,W,startx,starty,startz) 等价于streamtube (X,Y,Z,U,V,W,startx,starty,startz),其中,[X,Y,Z]=meshgrid(1:N,1:M,1:P),[M,N,P]=size(U),即[M,N,P]为数组U的大小。
● streamtube(vertices,X,Y,Z,divergence) 假设预先计算流管向量和差异。vertices为流管顶点的坐标数组,由stream3函数生成(stream3函数用于产生三维流线数据),X,Y,Z和divergence均为三维数组。
● streamtube(vertices,divergence) 假设定义(U,V,W)的坐标的数据(X,Y,Z)由下面的语句定义:[X,Y,Z]=meshgrid(1:N,1:M,1:P),其中,[M,N,P]=size(divergence),即[M,N,P]为数组divergence的大小。其他参量及结果同上。
● streamtube(vertices,width) 参量width表示圆管的宽度。width与数组vertices同维或width是一个标量。
● streamtube(vertices) 自动选择圆管的宽度。
● streamtube(...,[scale n]) 按scale参数定义流管的宽度,默认值scale=1。当scale=0时自动定义宽度。n为沿圆管周边分布的点数,默认值n=20。
● streamtube(axes_handle,...) 在句柄为axes_handle的轴上绘制流管图。
● h=streamtube(...,z) 返回流管图表面对象的句柄给向量h。
【实例1】 绘制流管图。
>> %导入数据 load wind [sx sy sz]=meshgrid(80,20:10:50,0:5:15); %生成单调的网格数据 daspect([1 1 1]) %设置坐标轴数据比例 %绘制流管图,如图2.95所示 streamtube(x,y,z,u,v,w,sx,sy,sz); %定义坐标轴和光照 axis tight shading interp; camlight; lighting gouraud
图2.95 绘制流管图
【实例2】 绘制流管图,向量数据由stream3提供。
>> %导入数据 load wind [sx sy sz]=meshgrid(80,20:10:50,0:5:15); %生成单调的网格数据 daspect([1 1 1]) %设置坐标轴数据比例 %生成向量数据 verts = stream3(x,y,z,u,v,w,sx,sy,sz); div = divergence(x,y,z,u,v,w); %绘制流管图,如图2.96所示 streamtube(verts,x,y,z,-div); %定义坐标轴和光照 axis tight shading interp camlight lighting gouraud
图2.96 绘制流管图,向量数据由stream3提供
2.3.4 streamribbons——流带图
【功能】 绘制三维流带图。
【语法介绍】
● streamribbon(X,Y,Z,U,V,W,startx,starty,startz) 绘制三维数组 U,V,W 的流带图。(X,Y,Z)是单调的网格数据(如由 meshgrid 函数生成的数据),表示(U,V,W)的坐标;(startx,starty,startz)定义流带的起点位置。
● streamribbon(U,V,W,startx,starty,startz) 等价于 streamribbon(X,Y,Z,U,V,W,startx,starty, startz),其中,[X,Y,Z]=meshgrid(1:N,1:M,1:P),[M,N,P]=size(U),即[M,N,P]为矩阵U的大小。
● streamribbon(vertices,X,Y,Z,cav,speed) 假设预先计算流带方向数组 vertices、卷曲角速率cav和流速speed。参量vertices通常由stream3函数生成(stream3函数用于产生三维流线数据)。X,Y,Z,cav和speed均为三维数组。
● streamribbon(vertices,cav,speed) 假设定义(U,V,W)的坐标的数据(X,Y,Z)由下面的语句定义:[X,Y,Z]=meshgrid(1:N,1:M,1:P),其中,[M,N,P]=size(cav)。
● streamribbon(vertices,twistangle) 定义流带的扭曲方向数组 twistangle。vertices 和twistangle维数相同。
● streamribbon(...,width) 设置流带的宽度为width。
● streamribbon(axes_handle,...) 在句柄为axes_handle的轴上绘制流带图。
● h=streamribbon(...) 返回流带图表面对象的句柄给向量h。
【实例】 绘制流带图。
>> %导入数据 load wind [sx sy sz]=meshgrid(80,20:10:50,0:5:15); %生成单调的网格数据 daspect([1 1 1]) %设置坐标轴数据比例 %绘制流带图,如图2.97所示 streamribbon(x,y,z,u,v,w,sx,sy,sz); % 定义坐标轴和光照 axis tight shading interp; camlight; lighting gouraud
图2.97 绘制流带图