matlab流场可视化后处理

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); %调整局部亮度

复制

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(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帮助文档。

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绘制。

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

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文件或者已有的变量导入。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

介绍MSYS2 在windows下与使用

系列文章目录 文章目录系列文章目录前言一、MSYS下载二、安装三、使用MSYS2安装CMake工具前言 MSYS的独立改写版本 MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08…

闭关修炼(0.0 pytorch基础学习)1

基于官网pytorch.org pytorch 动态 比较优秀 py3.7支持是最多的啦 原来anaconda 是蟒蛇的意思 细思极恐 python 是蛇 yi Introduction to PyTorch Tensors — PyTorch Tutorials 2.0.0cu117 documentation omygaga 英语极差 哈哈哈 tensor 多维数组 矩阵二维数组 Tensor…

G761-3005B伺服阀放大器

G761-3005B伺服阀放大器,两级设计能够实现高水平设备性能、更快的周期时间和更高的准确性,最终为客户带来更高的生产效率 双线圈力矩马达高可靠性冗余设计 力矩马达配置双精度喷嘴精确流量控制和可预测性 干式力矩马达设计消除力矩马达气隙中可能导致…

数据结构-二叉树(前中后层序遍历-代码实现)

一、概要 二叉树的遍历方式包括前序遍历、中序遍历、后序遍历和层序遍历,具体定义如下: 前序遍历:先访问根节点,然后按照前序遍历的方式递归访问左子树和右子树。 中序遍历:先按照中序遍历的方式递归访问左子树&#…

Spring————java的反射机制,Spring的IOC和DI

一、认识Spring 1.1、Spring家族 SpringFramework: Spring框架:是Spring中最早核心的技术,也是所有其他技术及的基础。 SpringBoot:Spring是用来简化开发。而SpringBoot是来帮助Spring在简化的基础上能更快速进行开发。 SpringCloud&#xf…

v851s gpio 应用程序编写

1. 查看硬件电路图SCH_Schematic1_2022-11-23 ,查找合适的gpio 作为使用pin 在这里我们选取 GPIOH14(注意目前开发使用这个pin 作为触摸屏的pin脚,需要将触摸屏connect断开) ,因为 可以通过排插使用杜邦线将其引出&am…

Maven高级-属性多环境配置与应用

Maven高级-属性&多环境配置与应用4,属性4.1 属性4.1.1 问题分析4.1.2 解决步骤步骤1:父工程中定义属性步骤2:修改依赖的version4.2 配置文件加载属性步骤1:父工程定义属性步骤2:jdbc.properties文件中引用属性步骤3:设置maven过滤文件范围步骤4:测试是否生效4.3…

mysql慢查询

目录标题如何收集慢SQL-- ELK体系收集慢日志分析SQL优化添加索引优化慢sql通过拆分冷热数据优化读写分离预防我们优化的思路是“收集——分析——优化——预防”了解完如何收集慢日志之后,就要开始分析 SQL 了。优化 SQL 的基础手段是 EXPLAIN,我们要收起…

Spark SQL实战(04)-API编程之DataFrame

1 SparkSession Spark Core: SparkContext Spark SQL: 难道就没有SparkContext? 2.x之后统一的 package com.javaedge.bigdata.chapter04import org.apache.spark.sql.{DataFrame, SparkSession}object SparkSessionApp {def main(args: Array[String]): Unit …

认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】

前言 分布式微服务系统中添加登录和注册,(这里暂未完成分布式情况下用户登录信息情况记录),主要记录:一个微服务专门管理用户信息。需要通过远程调用的形式,来完成用户注册以及登录流程,同时密…

【故障定位】基于多元宇宙算法的主动配电网故障定位方法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

二分搜索树

一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。若它…

视频生成: 基于Stable Diffusion的微调方法

chatGPT带来了几个月的AIGC热度,文本图像生成模型大行其道,但AI在视频生成任务上尚没有较好的开源仓库,并受限于“缺那么几百块A100"的资源问题,大多数人无法展开视频生成的研究。好在目前有不少针对视频生成的相关paper&…

Day936.如何重构过大类 -系统重构实战

如何重构过大类 Hi,我是阿昌,今天学习记录的是关于如何重构过大类的内容。 在过去的代码里一定会遇到一种典型的代码坏味道,那就是“过大类”。 在产品迭代的过程中,由于缺少规范和守护,单个类很容易急剧膨胀&#…

Learning C++ No.18【STL No.8】

引言: 北京时间:2023/3/18/21:47,周末,不摆烂,但是欠钱终于还是遭报应了,导致坐牢7小时(上午3.5,下午3.5),难受,充分意识到行哥是那么的和蔼可亲…

固定资产管理方案:二维码扫扫便知道

用草料可以批量、简单、低成本地制作固定资产二维码标签。 适用于办公设备、车辆、医疗器械、大型生产设备等需要制作一物一码标签的场景。还能配合报修表单、手机端编辑子码功能共同使用,完成对于固定资产的规范化管理: 用二维码管理公司固定资产1、固定…

【Linux】进程等待进程程序替换

进程等待&进程程序替换进程等待进程程序替换通过进程等待和进程程序替换来理解守护进程进程等待 僵尸进程的产生原因是:子进程先于父进程退出,在子进程退出时会给父进程发送SIGCHILD信号,而父进程接收到这个信号后选择不处理,…

2023年MathorCup数学建模赛题浅析

MathorCup俗称妈杯,是除了美赛国赛外参赛人数首屈一指的比赛,而我们的妈杯今天也如期开赛。今年的妈杯难度,至少在我看来应该是2023年截至目前来讲最难的一场比赛。问题的设置、背景的选取等各个方面都吐露着我要难死你们的想法。难度是恒定的…

世纪末的星期

题目 1、世纪末的星期 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会… 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星…

cuda ptx 汇编语言示例:读寄存器

编译 , Ampere 显卡,rtx 3060 3070... nvcc -archsm_86 -o hello hello_ptx.cu 或写成Makefile: hello: hello_sm_id.cunvcc -archsm_86 -o $ $^ #nvcc -archsm_86 -o hello hello_sm_id.cu $ 是指目标 $^ 是指第一个依赖 ^^ hello_ptx.cu #…