【问题标题】:Why is my Z limit not being set even though I specified it?为什么我的 Z 限制没有设置,即使我指定了它?
【发布时间】:2017-10-31 20:31:14
【问题描述】:

请参阅下面的代码:

x = linspace(-2*pi,2*pi,100);
y = linspace(-2*pi,2*pi,100);
[X,Y] = meshgrid(x,y);

for t = linspace(0,2*pi,400);
    Z = sin(sqrt(X.^2 + Y.^2 + t)) ./ (X.^2 + Y.^2 + t);
    figure(1); surf(X,Y,Z);
    pause(0.01)
    surf(X,Y,Z);
    az = 90;
    el = 25;
    figure(2);view(az,el);
    xlim([-10,10]);
    ylim([-10,10]);
    zlim([-1,1]);
end

为什么即使设置为[-1 1],z 限制仍会不断变化?

【问题讨论】:

    标签: matlab animation graph matlab-figure axis


    【解决方案1】:

    您的问题是,每次在循环中调用 surf 时,您都会不断重新创建整个绘图,从而丢弃您之前对轴限制所做的任何更改等。在为绘图设置动画时,效率更高(也更容易控制轴设置)如果您使用 set 更新 graphics objects 而不是完全复制它们,如图所示 here

    这是创建所需动画的更好方法:

    % Initialize data:
    x = linspace(-2*pi, 2*pi, 100);
    y = linspace(-2*pi, 2*pi, 100);
    [X, Y] = meshgrid(x, y);
    Z = sin(sqrt(X.^2 + Y.^2)) ./ (X.^2 + Y.^2);
    
    % Create plot objects and set axes settings:
    hSurf = surf(X, Y, Z);
    view(90, 25);
    xlim([-10 10]);
    ylim([-10 10]);
    zlim([-1 1]);
    
    % The animation loop:
    for t = linspace(0, 2*pi, 400)
      Z = sin(sqrt(X.^2 + Y.^2 + t)) ./ (X.^2 + Y.^2 + t);  % Recalculate Z
      set(hSurf, 'ZData', Z);  % Update surface Z data
      pause(0.01);  % Pause/refresh plot
    end
    

    【讨论】:

      【解决方案2】:

      我相信 view() 函数会覆盖/忽略 x yz 的大小。

      编辑: view([x,y,z]) 将视图方向设置为笛卡尔坐标 x、y 和 z。 (x,y,z) 的大小被忽略。 来自here

      【讨论】:

        猜你喜欢
        • 2021-12-16
        • 2020-02-14
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多