在matlab/octave中设置绘图/轨迹动画
我正在尝试使用matlab/octave设置这个螺旋的动画,我希望它向上或向下螺旋在matlab/octave中设置绘图/轨迹动画,matlab,math,animation,3d,octave,Matlab,Math,Animation,3d,Octave,我正在尝试使用matlab/octave设置这个螺旋的动画,我希望它向上或向下螺旋 t = 0:0.1:10*pi; r = linspace (0, 1, numel (t)); z = linspace (0, 1, numel (t)); plot3 (r.*sin(t), r.*cos(t), z); 我尝试使用for循环来设置动画,但这只给了我一个圆锥体形状,请参见下面的代码和图像 clear all, clc,clf,tic t = 0:0.1:10*pi; r = linspa
t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));
plot3 (r.*sin(t), r.*cos(t), z);
我尝试使用for循环来设置动画,但这只给了我一个圆锥体形状,请参见下面的代码和图像
clear all, clc,clf,tic
t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));
for ii=1:length(r)
ii
plot3 (r.*sin(t(ii)), r.*cos(t(ii)), z);
hold on
%pause (.00001)
end
Image当然不是最漂亮的,但是这些是您需要对代码进行的第一次更改,以便它能够实现您想要的功能
t = 0:0.1:10*pi;
z = linspace (1, 0, numel (t));
for ii=1:length(t)
plot3 (z(ii)*sin(t(ii)),z(ii)*cos(t(ii)), z(ii));
hold on
pause (.00001)
end
以下内容似乎适用于倍频程3.6.2
t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));
figure
axis([-1 1 -1 1 0 1])
hold on
for ii=1:length(r)
plot3 (r(ii)*sin(t(ii)), r(ii)*cos(t(ii)), z(ii),'*');
pause (.001)
end
您还可以使用
comet3()
软件包,该软件包可以为曲线图中的轨迹设置动画:
delay = 0.001 % seconds
figure
comet3(r.*sin(t), r.*cos(t), z, delay);
这使一个连续的轨迹成为动画,我更喜欢这个轨迹,而不是一个离散的*序列
一个缺点是,Octave 3.6.4附带的comet
和comet3
版本速度较慢,无论您使用的延迟如何。但这可以通过以下技巧克服:
次要注释:修改函数后,需要强制八度音重新加载。您可以重新启动,或者最好使用
clearcomet
和clearcomet3
。下一次调用这些函数时,它们的定义将被刷新。这不是轨迹解决方案,而是旋转的龙卷风
phi = linspace(0, 10*pi, 300);
r = linspace (0, 1, 300);
z = linspace (0, 1, 300);
s = 100; %speed of turning
for t = 0:0.01:10 %t is time
plot3 (r.*sin(phi+t*s), r.*cos(phi+t*s), z);
pause(0.01)
end
看看这个答案:Davin这只是给了我一个错误“第0行:所有边未定义或超出范围,因此没有绘图。”@RickT,以前从未使用过倍频程,我在Matlab上执行它,可能是兼容性/版本问题。您可以尝试添加
clear…
行,或将plot3
替换为scatter3
,这可能会有所帮助。如果不是的话,我就没有想法了。这很好,虽然它没有提供轨迹,只是一系列的点。有关设置轨迹动画的解决方案,请参见。
phi = linspace(0, 10*pi, 300);
r = linspace (0, 1, 300);
z = linspace (0, 1, 300);
s = 100; %speed of turning
for t = 0:0.01:10 %t is time
plot3 (r.*sin(phi+t*s), r.*cos(phi+t*s), z);
pause(0.01)
end