2

我在 Matlab 中有一个数组,每个时间步都会更新:每一行对应一个时间,每一列代表距离中心一定半径的温度。meshgrid如果可以使用andcontourf命令将颜色渐变应用于绘图,那也会很方便。到目前为止,这是我拥有的 Matlab 代码,但我不确定如何将温度带入绘图并为温度变化设置动画。

Tinf = 200;  % ambient temperature

% where r1 = radius1, r2 = radius2, etc.
%        t = time
%        rows = time
%        columns = radius

%    r1   r2    r3    r4    r5
T = [98   105   110   118   128;  % t=1
     109  110   117   124   134;  % t=2
     110  118   120   130   144]; % t=3

r = 0.08;  % radius of circle

rx = -r:0.01:r;
ry = r:-0.01:-r;

[x_coor, y_coor] = meshgrid(rx, ry);

radius = sqrt(x_coor.^2+y_coor.^2);

figure(1)
contourf(radius,'edgecolor','none')

我正在尝试在 Matlab 中创建一个圆形图,该图将显示每个半径处的温度(颜色),并随着温度的升高或降低而对该温度(改变颜色)进行动画处理。

在某个时间这样的情节的一个例子是:

半径温度

所以 T 数组中的第 1 列对应于图片中的节点 1,第 2 列对应于节点 2,依此类推。因此在时间 = 0 时,节点 1 = 98,节点 2 = 105,节点 3 = 110,节点 4 = 118,节点 5 = 128;在时间 = 1 时,节点 1 = 109,节点 2 = 110,节点 3 = 117,节点 4 = 124,节点 5 = 134;等等。

完成这样一个情节的任何建议都会非常有帮助。

4

2 回答 2

2

与@Magla 的好答案相同,但绘制了一个允许插值的表面(不是覆盖)

T = [98   105   110   118   128;
    109  110   117   124   134;
    114  118   120   130   138];

Rmax = 30;
[x,y,z] = sphere(100);
x=x*Rmax;
y=y*Rmax;

rxy2 = x.^2+y.^2;


r = [0 10 20 30];
r2 = r.^2;

figure('Color', 'w');

for ind_t = 1:size(T,1)
    for ii = 1:length(r2)-1
        ir_find = find(rxy2<=r2(ii+1) & rxy2>r2(ii));
        z(ir_find) = T(ind_t,ii);
    end

    hax = axes('Position',[0 0 1 1]);
    h = surf(x,y,z)  % sphere centered at origin

    shading interp
    set(h, 'EdgeColor', 'None');

    view(0,90);
    axis equal;
    set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
    pause(0.5);
end

编辑

重写以使用网格网格并使用感兴趣的特定半径等。确保将 r_res 调整为您认为合适的值。

T = [98   105   110   118   128;
    109  110   117   124   134;
    114  118   120   130   138];

%---------------------------------------
r = 0.08;  % radius of circle

r_res = 0.0005;

rx = -r:r_res:r;
ry = rx;

[x, y] = meshgrid(rx, ry);

rxy2 = x.^2+y.^2;
z=ones(size(rxy2))*NaN;

%---------------------------------------

Nshells = size(T,2);
r = [0:1/Nshells:1]*r;
r2 = r.^2;

figure('Color', 'w');
colormap hot

for ind_t = 1:size(T,1)
    for ii = 1:Nshells
        ir_find = find(rxy2<=r2(ii+1) & rxy2>r2(ii));
        z(ir_find) = T(ind_t,ii);
    end

    hax = axes('Position',[0 0 1 1]);
    h = surf(x,y,z)  % sphere centered at origin

    shading interp
    set(h, 'EdgeColor', 'None');

    view(0,90);
    axis equal;
    set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
    pause(0.5);
end
于 2013-08-21T11:58:52.383 回答
1

这是一个使用sphere. sphere生成矩阵xy乘以递减的半径r和矩阵z减少为单个值(球体变成圆盘)。z乘以温度,磁盘被绘制在彼此的顶部。颜色取决于整个输入矩阵的min和。max动画是用pause.

T = [98   105   110   118   128;
    109  110   117   124   134;
    114  118   120   130   138];

[x,y,z] = sphere(100);
r = [50 40 30 20 10];

figure('Color', 'w');

for ind_t = 1:size(T,1)

    hax = axes('Position',[0 0 1 1]);

    for ii = 1:length(r)
        h = surf(x*r(ii),y*r(ii),z*0+T(ind_t,ii))  % sphere centered at origin
        set(h, 'EdgeColor', 'None');
        hold on;
    end

    view(0,90);
    axis equal;
    set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
    pause(0.5);

end

这给

在此处输入图像描述

于 2013-08-21T01:52:53.267 回答