简体   繁体   English

如何在Matlab中制作圆柱三维等高线图?

[英]How can I make a cylindrical 3D contour plot in Matlab?

I have an axisymmetric flow with mxn grid points in r and z direction and I want to plot the temperature that is stored in a matrix with size mxn in a 3D cylindrical plot as visualized in the link below (My reputation is not high enough to include it as a picture). 我有一个轴对称流,在r和z方向有mxn网格点,我想在3D圆柱图中绘制存储在尺寸为mxn的矩阵中的温度,如下面的链接所示(我的声誉不够高,不能包括它作为图片)。

I have managed to plot it in 2D (r,z plane) using contour but I would like to add the theta plane for visualization. 我已经设法使用轮廓在2D(r,z平面)中绘制它,但我想添加theta平面用于可视化。 How can I do this? 我怎样才能做到这一点?

在此输入图像描述

You can roll your own with multiple calls to surface() . 您可以通过多次调用surface()滚动。 Key idea is: for each surface: (1) theta=theta1, (2) theta=theta2, (3) z=zmax, (4) z=0, (5) r=rmax, generate a 3D mesh (xx,yy,zz) and the temperature map on that mesh. 关键思想是:对于每个表面:(1)theta = theta1,(2)theta = theta2,(3)z = zmax,(4)z = 0,(5)r = rmax,生成3D网格(xx, yy,zz)和该网格上的温度图。 So you have to think about how to construct each surface mesh. 所以你必须考虑如何构造每个表面网格。
Edit: completed code is now provided. 编辑:现在提供完整的代码。 All magic number and fake data are put at (almost) the top of the code so it's easy to convert it into a general purpose Matlab function. 所有幻数和伪数据都放在(几乎)代码的顶部,因此很容易将其转换为通用的Matlab函数。 Good luck! 祝好运!

轴对称数据的3D圆柱曲面图

% I have adjusted the range values to show the curved cylinder wall 
% display a variable temperature
r = 0:0.1:2.6; % you can also try r = 0:0.1:3.0
z = 0:0.1:10;  % you can also try z = 0:0.1:15;
[rr, zz] = meshgrid(r,z);

% fake temperature data
temp = 100 + (10* (3-rr).^0.6) .* (1-((zz - 7.5)/7.5).^6) ;

% visualize in 2D
figure(1);
clf;
imagesc(r,z,temp);
colorbar;

% set cut planes angles
theta1 = 0;
theta2 = pi*135/180;
nt = 40;  % angle resolution

figure(2);
clf;

xx1 = rr * cos(theta1);
yy1 = rr * sin(theta1);
h1 = surface(xx1,yy1,zz,temp,'EdgeColor', 'none');

xx2 = rr * cos(theta2);
yy2 = rr * sin(theta2);
h2 = surface(xx2,yy2,zz,temp,'EdgeColor', 'none');

% polar meshgrid for the top end-cap
t3 = linspace(theta1, (theta2 - 2*pi), nt);
[rr3, tt3] = meshgrid(r,t3);
xx3 = rr3 .* cos(tt3);
yy3 = rr3 .* sin(tt3);
zz3 = ones(size(rr3)) * max(z);
temp3 = zeros(size(rr3));
for k = 1:length(r)
    temp3(:,k) = temp(end,k);
end
h3 = surface(xx3,yy3,zz3,temp3,'EdgeColor', 'none');

% polar meshgrid for the bottom end-cap
zz4 = ones(size(rr3)) * min(z);
temp4 = zeros(size(rr3));
for k = 1:length(r)
    temp4(:,k) = temp(1,k);
end
h4 = surface(xx3,yy3,zz4,temp4,'EdgeColor', 'none');

% generate a curved meshgrid
[tt5, zz5] = meshgrid(t3,z);
xx5 = r(end) * cos(tt5); 
yy5 = r(end) * sin(tt5); 
temp5 = zeros(size(xx5));
for k = 1:length(z)
    temp5(k,:) = temp(k,end);
end
h5 = surface(xx5, yy5, zz5,temp5,'EdgeColor', 'none');

axis equal
colorbar
view(125,25);  % viewing angles

使用EdgeColor ='k',您可以更好地可视化网格

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM