转载:matlab流场可视化后处理
原文鏈接:https://blog.csdn.net/weixin_42943114/article/details/88415270
matlab流場可視化后處理
1流體中標量的可視化
1.1 云圖
1.2 切片圖繪制
1.3 三維等值面圖繪制
2流體中矢量的可視化
2.1 箭頭圖或速度圖
2.2 流線圖
2.4 帶節點的流線圖
2.5流管圖和流帶圖
2.6 圓錐體圖
2.7 粒子動畫圖
3 參考鏈接
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
3
4
5
6
7
繪制結果如下:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
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]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
1
2
3
4
5
輸出結果如下
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
1
2
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
1
2
3
4
5
6
7
結果如下所示
雙向隨機繪圖:
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
如果流場可以用具體的流函數表示出來,則可以利用等值線的方式繪制:
%等勢面方法
[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
1
2
3
4
5
6
7
8
9
10
11
12
13
對于3維流場的流線圖,推薦用streamslice繪制。
https://ww2.mathworks.cn/help/matlab/ref/streamslice.html
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
繪制結果如下:
其中流管的粗細代表散度的變化,流管的方向代表流線的變化。
流帶圖的繪制如下所示:
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
1
2
3
4
5
6
7
8
9
10
11
12
繪制結果如下:
除了方向和散度,流帶的扭轉還能表示旋度的變化。
此外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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
效果如下:
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])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
輸出粒子在某一時刻的截圖如下:
3 參考鏈接
https://ww2.mathworks.cn/help/matlab/volume-visualization.html
或 搜索matlab的Volume Visualization文檔
---------------------?
作者:hyhhyh21?
來源:CSDN?
原文:https://blog.csdn.net/weixin_42943114/article/details/88415270?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的转载:matlab流场可视化后处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装Hitool JRE环境
- 下一篇: 转折点(心得)