matlab流场可视化后处理

  • 1流体中标量的可视化
    • 1.1 云图
    • 1.2 切片图绘制
    • 1.3 三维等值面图绘制
  • 2流体中矢量的可视化
    • 2.1 箭头图或速度图
    • 2.2 流线图
    • 2.4 带节点的流线图
    • 2.5流管图和流带图
    • 2.6 圆锥体图
    • 2.7 粒子动画图
    • 2.8 Volume Viewer APP
  • 3 参考链接

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 windfigure
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(65,30)
camlight(-45,45)
hcap.AmbientStrength = 1;
lighting gouraud
daspect([1 1 1]);

2流体中矢量的可视化

流体中常见的矢量有速度矢量、旋度矢量、梯度矢量等。

2.1 箭头图或速度图

matlab常用的速度图函数为quiver和quiver3。

quiver为二维矢量图绘制,用法如下图所示。如果绘制箭头太密集,可以采用间隔采样的方式绘制。

load wind
figure()
x2=x(:,:,5);y2=y(:,:,5);u2=u(:,:,5);v2=v(:,:,5);
Q=quiver(x2,y2,u2,v2);%详见帮助文档quiver
Q.AutoScaleFactor=1.2;%更改箭头比例,详见帮助文档Quiver Properties

输出结果如下

quiver3为3维矢量场的绘制。可视化效果不如coneplot函数的圆锥图。
推荐搭配空间曲面的使用。参见quiver3帮助文档。https://ww2.mathworks.cn/help/matlab/ref/quiver3.html

load wind
quiver3(x([5 10],:,:),y([5 10],:,:),z([5 10],:,:),u([5 10],:,:),v([5 10],:,:),w([5 10],:,:))%quiver3

2.2 流线图

matlab中绘制流线常用的函数有:streamline、streamslice、stream2、stream3、interpstreamspeed。

matlab中标准的流线图streamline需要知道流场的起始点,但通常对于复杂流场,起始点没有规律。而且二维流场streamline也不会显示流场方向。

一种解决方法为随机在空间中散布一些点,然后以这些点为起点正向反向同时绘制流线。

matlab中的streamline用法:

load wind
x2=x(:,:,5);y2=y(:,:,5);u2=u(:,:,5);v2=v(:,:,5);
hold on
startx=73*ones(1,6);starty=20:5:45;%定义流线起点
streamline(x2,y2,u2,v2,startx,starty)
quiver(x2(1:3:end,1:3:end),y2(1:3:end,1:3:end),u2(1:3:end,1:3:end),v2(1:3:end,1:3:end),'color','r')
hold off

结果如下所示

双向随机绘图:

load wind
figure()
N=30; %随机点的数量
x2=x(:,:,5);y2=y(:,:,5);u2=u(:,:,5);v2=v(:,:,5);
maxx=max(x,[],'all');minx=min(x,[],'all');
maxy=max(y,[],'all');miny=min(y,[],'all');%最大值最小值
startx=rand(N,1)*(maxx-minx)+minx;
starty=rand(N,1)*(maxy-miny)+miny;%生成随机点
XY1 = stream2(x2,y2,u2,v2,startx,starty);%正向流线计算
XY2 = stream2(x2,y2,-u2,-v2,startx,starty);%反向流线计算
hold on
for j=1:N%绘制流线plot([flipud(XY2{j}(:,1));XY1{j}(:,1)],[flipud(XY2{j}(:,2));XY1{j}(:,2)],'-k')
end
quiver(x,y,u,v)
hold off


如果流场可以用具体的流函数表示出来,则可以利用等值线的方式绘制:

%等势面方法
[x2,y2]=meshgrid(-5:0.1:5,-5:0.1:5);
P=x2.^2-y2.^2;Q=2*x2.*y2;
[u2,v2]=gradient(P);u2=-u2;v2=-v2;%势函数全部是负号
max(abs(curl(x2,y2,u2,v2)),[],'all');
figure
hold on
pcolor(x2,y2,P)%势函数
shading interp
quiver(x2(1:8:end,1:8:end),y2(1:8:end,1:8:end),u2(1:8:end,1:8:end),v2(1:8:end,1:8:end),'color','r')
contour(x2,y2,Q,'LineColor','k','LineWidth',1.5,'LevelList',linspace(-50,50,20))
caxis([-25,25])
hold off


对于3维流场的流线图,推荐用streamslice绘制。
https://ww2.mathworks.cn/help/matlab/ref/streamslice.html

streamslice的优点是可以很好的反应出方向和中断,这里就不做过多说明了。

对如何绘制流线或向量场感兴趣的,可以参见我的另一篇文章:
利用matlab绘制二维均匀流线和向量场(向量场彩色箭头,颜色随变量变化)

2.4 带节点的流线图

matlab中带节点的流线图函数为interpstreamspeed()。它在每条流线上添加了一定的节点,单根流线上的节点密集代表流速慢,节点稀疏代表流速快。
这个函数直接看interpstreamspeed的帮助文档就行了,可视化效果不是很美观。

2.5流管图和流带图

matlab中的流管图和流带图函数为streamtube和streamribbon,可以同时反映流场的方向、的、散度、旋度信息。

下图为流管图示意图:

load wind%[x,y,z,v]=flow();
[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);verts = stream3(x,y,z,u,v,w,sx,sy,sz);
div = divergence(x,y,z,u,v,w);
htubes=streamtube(verts,x,y,z,-div);%以上3行可以用streamtube(x,y,z,u,v,w,sx,sy,sz);代替set(htubes,'EdgeColor','none','AmbientStrength',.5)
shading interp%彩色view(3);
axis tight
camlight
lighting gouraud

绘制结果如下:

其中流管的粗细代表散度的变化,流管的方向代表流线的变化。

流带图的绘制如下所示:

figure()
load wind
[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);
verts = stream3(x,y,z,u,v,w,sx,sy,sz);
cav = curl(x,y,z,u,v,w);%旋度
spd = sqrt(u.^2 + v.^2 + w.^2).*.1;%速度
streamribbon(verts,x,y,z,cav,spd);
axis tight
shading interp
view(3);
camlight;
lighting gouraud

绘制结果如下:

除了方向和散度,流带的扭转还能表示旋度的变化。

此外matlab官方还有一副很酷炫的流带图,我也摘了过来:

2.6 圆锥体图

在三维向量场中以圆锥体形式绘制速度向量,由于其立体感比quiver3更好,所以更常用于三维流场。函数为coneplot。

clear
close all
load wind
xmin = min(x(:));
xmax = max(x(:));
ymin = min(y(:));
ymax = max(y(:));
zmin = min(z(:));%确定最大最小值
xrange = linspace(xmin,xmax,8);
yrange = linspace(ymin,ymax,8);
zrange = 3:4:15;
[cx,cy,cz] = meshgrid(xrange,yrange,zrange);绘制点的坐标位置figure
hcone = coneplot(x,y,z,u,v,w,cx,cy,cz,5);
hcone.FaceColor = 'red';
hcone.EdgeColor = 'none';view(30,40)
daspect([2,2,1])
camlight right
lighting gouraud
hcone.DiffuseStrength = 0.8;

效果如下:

2.7 粒子动画图

streamparticles函数可以绘制流粒子,即定常流场的迹线动画。
缺点是不能输出gif动图,不能显示非定常流场,如果想专门做这块的话建议自己编程。

load wind
figure
daspect([1,1,1]);
view(2)
[verts,averts] = streamslice(x,y,z,u,v,w,[],[],[5]);
sl = streamline([verts averts]);
axis tight manual off;
ax = gca;
ax.Position = [0,0,1,1];
%set(sl,'Visible','off')
iverts = interpstreamspeed(x,y,z,u,v,w,verts,.05);
zlim([4.9,5.1]);
streamparticles(iverts, 200, 'Animate',15,'FrameRate',40, ...'MarkerSize',10,'MarkerFaceColor',[0 .5 0])

输出粒子在某一时刻的截图如下:

2.8 Volume Viewer APP

最近看到了一个App,在matlab菜单栏的App里面,叫做Volume Viewer。看起来很有意思,用一个小的GUI形式,提供了三维数据的查看方式。

里面可以进行颜色映射、颜色透明度映射等修改。可以自定义切片。数据导入支持从已有的mat文件或者已有的变量导入。



如果只是快速查看三维数据的话,这种拖拖拽拽点点点就能看的感觉还是挺方便的。

3 参考链接

https://ww2.mathworks.cn/help/matlab/volume-visualization.html
或 搜索matlab的Volume Visualization文档

matlab流场可视化后处理相关推荐

  1. 流场可视化工程dlb-dynamicdr部署日志:阶段二:工程本地编译

    流场可视化工程dlb-dynamicdr部署日志:阶段二: 工程本地编译 2022-02-25 阶段一 阶段二:勘误 阶段三:为之前的库编译生成静态链接库 .a文件 Par_METIS重新生成 MET ...

  2. 流场可视化工程dlb-dynamicdr部署日志:阶段五:实验室服务器程序运行

    流场可视化工程dlb-dynamicdr部署日志:阶段五:实验室服务器程序运行 2022-03-03 当前环境: 运行(阶段一:Init部分) 2022-03-04 阶段一(总) MPICH重新部署 ...

  3. matlab 汽车 流场,matlab画流场图

    基于 Matlab 分布式工具箱的流场计算及其可视化 蔡群;周美莲;段杰峰;李青... 基于 MATLAB 和 CFD 数据库的流场可视化的实现 [J], 晏畅 5.基于 VB 与 MATLAB 混合 ...

  4. 【案例教程】Python气象海洋数据可视化到常见数据分析方法(折线图、柱状图、errorbar图、流场矢量、散点图、风玫瑰图、流场矢量、填色及等值线+地图)

    [查看原文]Python在气象与海洋中的实践技术应用 Python是功能强大.免费.开源,实现面向对象的编程语言,能够在不同操作系统和平台使用,简洁的语法和解释性语言使其成为理想的脚本语言.除了标准库 ...

  5. MATLAB读取TECPLOT笛卡尔网格三维流场数据

    基于笛卡尔网格的三维流动数值模拟,其流场信息可以通过tecplot格式进行输出,方便tecplot对流场进行可视化处理,但对数据进行在加工时,还是导入matlab中比较方便,那么对于一个tecplot ...

  6. 利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用)

    利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用) 0 前言 0.1 特征根的计算与含义 1 DMD的基本思路 2 一维DMD算法 3 二维DMD算法 4 总结 (2020年9 ...

  7. 采用 MRT-LBM 模拟旋转圆柱绕流---MATLAB代码--王富海2017--基于 MRT-LBM 的流场与声场仿真计算

    %这个例子采用 MRT-LBM 模拟旋转圆柱绕流 %基于 MRT-LBM 的流场与声场仿真计算 --王富海2017 %左边速度边界-泊肃叶流,右边压力边界,上下无滑移壁面(全部用非平衡外推格式) %还 ...

  8. matlab 速度 流场变化,[MATLAB基础] 请问怎样将两结果(流场速度和线形态)叠加到一张图上?...

    请问怎样将两结果(流场速度和线形态)叠加到一张图上? 我已分别计算出流场速度和线的运动形态,都是三维的.其中流场速度是用CFD软件算的,而线的形态是在MATLAB里编程算的,现想把两结果表示在同一张图 ...

  9. 利用matlab实现POD分解(在一维信号或二维流场矢量中的应用)

    利用matlab实现POD分解(在一维信号或二维流场矢量中的应用) 0 前言 0.1 matlab中特征值计算 0.2 matlab中SVD分解计算 0.3 信号的正交性 1 一维信号POD分解 1. ...

最新文章

  1. RTOS诊断和错误检查
  2. 8.公有继承 保护继承 私有继承
  3. springcloud ribbon retryTemplate操作流程分析
  4. AndroidStudio中如何打开hierarchyviewer.bat
  5. 如何实现移动端轮播图的左滑右滑效果
  6. php7 pdo mysql_PHP7添加pdo_mysql扩展
  7. python计算结果传给spark_Spark入门:流计算简介(Python版)
  8. 一看就会的 GitHub 骚操作,让你看上去像一位开源大佬
  9. C/C++数组名与指针区别
  10. 易语言数据类型与c 对照,易语言利用自定义数据类型和数组. 制作键对值操作类/内存配置...
  11. 一个成型的awt所必须的frame组件
  12. Lua中调用C/C++函数 (转)
  13. [数据库]日期格式相关参数传递
  14. poythoncode-实战3--判断输入参数--过滤条件
  15. 【学习笔记】生成下一个排列(STL库函数next——permutation)
  16. BLM战略规划的核心是业务模式创新
  17. 国家发改委发布《“互联网+”高效物流实施意见》
  18. java(File、IO流)
  19. 空间注意力机制和通道注意力机制详解
  20. [转]频谱、幅度谱、功率谱和能量谱

热门文章

  1. 使用脚本更改计算机名
  2. Windows操作系统截屏快捷键
  3. java memorycache原理_CPU Cache 原理及操作
  4. 如果我比别人走得更远些,那是因为我站在巨人的肩上。
  5. openlayers官方教程(三)Basics——Zooming to your location
  6. 自制蹭网工具(全套-修改电脑MAC地址、IP、获取局域网内别人的MAC和IP)
  7. 永洪BI——国内领军的一站式大数据分析平台
  8. 如何在Docker容器中运行Docker [3种方法]
  9. 分布式下如何实现统一日志系统?
  10. 利用PRM-DUL工具恢复oracle dbf文件中的数据