matlab流场可视化后处理
2020.04.01 更新,添加了对新文章的引用
2021.04 更新,添加了Volume Viewer APP的介绍。把网址改成了超链接形式。
1流体中标量的可视化
流体力学中常见的标量为位置、速度绝对值、压强等。
1.1 云图
常用的云图绘制有pcolor、image、imagesc、imshow、contourf等函数。
这里利用matlab自带的wind数据作为演示案例,显示二维云图的速度场。
close all
load wind
x2=x(:,:,5);y2=y(:,:,5);u2=u(:,:,5);v2=v(:,:,5);
%速度云图
figure()
pcolor(x2,y2,sqrt(u2.^2+v2.^2))
shading interp%插值绘制颜色
绘制结果如下:
1.2 切片图绘制
切片图常用于可视化复杂的三维流动。
由于二维计算机屏幕和二维视网膜的限制,人类对垂直于眼球面的速度分量不是很敏感,所以绘制三维可视化的时候一定要注意光照、视角、明暗、反光等信息,辅助人去补全第三维度的信息。
常用的切片显示函数有contourslice和slice,对应二维的contour和pcolor用法。
下面以流场的涡量切片图为例,介绍切片图的用法。
close all
load wind
%涡量切片图绘制
%构建颜色图
mycmp=[[ones(20,1),(0.05:0.05:1)',(0.05:0.05:1)'];[(1:-0.05:0.05)',(1:-0.05:0.05)',ones(20,1)]];
cav = curl(x,y,z,u,v,w); %计算旋度
h = slice(x,y,z,cav,[90 134],59,0); %切片
shading interp
daspect([1 1 1]); %坐标轴缩放
axis tight
colormap(mycmp);
caxis([-5,5]) %确定颜色范围,使得颜色图中白色对应0涡量
camlight %设置光照
set([h(1),h(2)],'ambientstrength',.6); %调整局部亮度
关于切片的更多方法,可以参见matlab的教程:
Exploring Volumes with Slice Planes利用切片平面探索三维体
1.3 三维等值面图绘制
等值面相关的常用函数有:patch、isosurface、isocaps、isocolors、isonormals、reducevolume、subvolume等。
下面以绘制三维速度等值面为例,介绍等值面的用法。
close all
clear
load wind
figure
wind_speed = sqrt(u.^2 + v.^2 + w.^2);%速度
%绘制等值面
hiso = patch(isosurface(x,y,z,wind_speed,40));
isonormals(x,y,z,wind_speed,hiso) %平滑
hiso.FaceColor = 'red'; %等值面上色
hiso.EdgeColor = 'none';
%绘制断面
hcap = patch(isocaps(x,y,z,wind_speed,40),...
'FaceColor','interp', 'EdgeColor','none');
colormap hsv
%调整图片视角光源等
axis tight
set(gca,'BoxStyle','full','Box','on')
camproj perspective
%camzoom(1.25)
view(6