请参阅下面的代码:
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
为什么z限制仍然保持不变,即使设置为[-1 1]
?
答案 0 :(得分:3)
您的问题是,每次在循环中调用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
答案 1 :(得分:-1)
我认为view()
函数会覆盖/忽略x
y
和z
的大小。
编辑: view([x,y,z])将视图方向设置为笛卡尔坐标x,y和z。 (x,y,z)的大小被忽略。 来自here