如何在动画中移动的圆圈后面添加标签?
How to add labels following the moving circle in the animation?
我看了一些相关的讨论:
Text Animation with MATLAB
这些例子比我的难多了,所以我不太明白如何解决我的问题。
我做了下面的动画,我只是想
- 在 "center blue point"
下添加标签“{E}”
- 在 "small blue circle" 附近添加标签“{P}”,旋转 "center blue point" 并在 "middle blue circle" 内部。
- 在 "small red *" 附近添加标签“{S}”,旋转 "big blue circle"。
当然,标签 {P} 和 {S} 应该紧跟每个对应的对象。
我该怎么做?
...
clear all;
close all;
clc
%% time specifications
stoptime = 8;
fs = 50;
dt = 1/fs;
t = (0:dt:stoptime)';
N = size(t,1);
%%
vx(:,1) = 0;vy(:,1) = 15;vz(:,1) = 0;
ux(:,1) = 0 ;uy(:,1) = 3 ;uz(:,1) = 0;
%% angular velocity
Ix = 3,5;
Iz = 1;
w = .1; % w_L
wp = ( (Ix-Iz)/Iz )*w*(2)^.5
%%
for k = 2:N
vx(:,k) = cos(w*(k-1))*vx(:,1) - sin(w*(k-1))*vy(:,1) + 0*vz(:,1);
vy(:,k) = sin(w*(k-1))*vx(:,1) + cos(w*(k-1))*vy(:,1) + 0*vz(:,1);
vz(:,k) = 0*vx(:,k-1) + 0*vy(:,k-1) + 1*vz(:,k-1);
ux(:,k) = cos((w+wp)*(k-1))*ux(:,1) - sin((w+wp)*(k-1))*uy(:,1) + 0*uz(:,1) + vx(:,k);
uy(:,k) = sin((w+wp)*(k-1))*ux(:,1) + cos((w+wp)*(k-1))*uy(:,1) + 0*uz(:,1) + vy(:,k);
uz(:,k) = 0*ux(:,1) + 0*uy(:,1) + 1*uz(:,1) + vz(:,k);
o = [0;0];
xline = [vx(:,k);o(1,1)];
yline = [vy(:,k);o(2,1)];
xline1 = [vx(:,k);ux(:,k)];
yline1 = [vy(:,k);uy(:,k)];
figure(1)
ang=0:0.01:2*pi;
xp=15*cos(ang);
yp=15*sin(ang);
xp1=3*cos(ang)+vx(:,k);
yp1=3*sin(ang)+vy(:,k);
plot(xp,yp,'c--'); hold on
plot(xp1,yp1); hold on
plot(0,0,'.'); hold on
plot(xline,yline); hold on
plot(xline1,yline1); hold on
plot(vx(:,k),vy(:,k),'bo');
plot(ux(:,k),uy(:,k),'r*'); hold on
axis([-25 25 -25 25]);
axis equal
axis manual
pause(.1);
hold off
end
抱歉,我不知道要上传我的动画视频。这只是它的照片。
您可以使用 text
函数执行此操作。
tOff = [1,1]; %%% (text offset)
plot(xp,yp,'c--'); hold on
plot(xp1,yp1);
plot(0,0,'.');
text (tOff, tOff, sprintf('(%d,%d)', 0, 0)); %%%
plot(xline,yline);
plot(xline1,yline1);
plot(vx(:,k),vy(:,k),'bo');
text (vx(:,k)+tOff,vy(:,k)+tOff, sprintf('(%1.3d,%1.3d)', vx(:,k),vy(:,k))); %%%
plot(ux(:,k),uy(:,k),'r*');
text (ux(:,k)+tOff,uy(:,k)+tOff, sprintf('(%1.3d,%1.3d)', vx(:,k),vy(:,k))); %%%
axis([-25 25 -25 25]);
axis equal
axis manual
pause(.1);
hold off
这与您上面的代码相同,只是添加了一些内容,标记为 %%%
。
另请注意,hold on
只需指定一次,并将一直应用到 hold off
出现(或图形被销毁)。 (我删除了上面代码中多余的 hold on
指令)。
我看了一些相关的讨论:
Text Animation with MATLAB
这些例子比我的难多了,所以我不太明白如何解决我的问题。
我做了下面的动画,我只是想
- 在 "center blue point" 下添加标签“{E}”
- 在 "small blue circle" 附近添加标签“{P}”,旋转 "center blue point" 并在 "middle blue circle" 内部。
- 在 "small red *" 附近添加标签“{S}”,旋转 "big blue circle"。
当然,标签 {P} 和 {S} 应该紧跟每个对应的对象。
我该怎么做? ...
clear all;
close all;
clc
%% time specifications
stoptime = 8;
fs = 50;
dt = 1/fs;
t = (0:dt:stoptime)';
N = size(t,1);
%%
vx(:,1) = 0;vy(:,1) = 15;vz(:,1) = 0;
ux(:,1) = 0 ;uy(:,1) = 3 ;uz(:,1) = 0;
%% angular velocity
Ix = 3,5;
Iz = 1;
w = .1; % w_L
wp = ( (Ix-Iz)/Iz )*w*(2)^.5
%%
for k = 2:N
vx(:,k) = cos(w*(k-1))*vx(:,1) - sin(w*(k-1))*vy(:,1) + 0*vz(:,1);
vy(:,k) = sin(w*(k-1))*vx(:,1) + cos(w*(k-1))*vy(:,1) + 0*vz(:,1);
vz(:,k) = 0*vx(:,k-1) + 0*vy(:,k-1) + 1*vz(:,k-1);
ux(:,k) = cos((w+wp)*(k-1))*ux(:,1) - sin((w+wp)*(k-1))*uy(:,1) + 0*uz(:,1) + vx(:,k);
uy(:,k) = sin((w+wp)*(k-1))*ux(:,1) + cos((w+wp)*(k-1))*uy(:,1) + 0*uz(:,1) + vy(:,k);
uz(:,k) = 0*ux(:,1) + 0*uy(:,1) + 1*uz(:,1) + vz(:,k);
o = [0;0];
xline = [vx(:,k);o(1,1)];
yline = [vy(:,k);o(2,1)];
xline1 = [vx(:,k);ux(:,k)];
yline1 = [vy(:,k);uy(:,k)];
figure(1)
ang=0:0.01:2*pi;
xp=15*cos(ang);
yp=15*sin(ang);
xp1=3*cos(ang)+vx(:,k);
yp1=3*sin(ang)+vy(:,k);
plot(xp,yp,'c--'); hold on
plot(xp1,yp1); hold on
plot(0,0,'.'); hold on
plot(xline,yline); hold on
plot(xline1,yline1); hold on
plot(vx(:,k),vy(:,k),'bo');
plot(ux(:,k),uy(:,k),'r*'); hold on
axis([-25 25 -25 25]);
axis equal
axis manual
pause(.1);
hold off
end
抱歉,我不知道要上传我的动画视频。这只是它的照片。
您可以使用 text
函数执行此操作。
tOff = [1,1]; %%% (text offset)
plot(xp,yp,'c--'); hold on
plot(xp1,yp1);
plot(0,0,'.');
text (tOff, tOff, sprintf('(%d,%d)', 0, 0)); %%%
plot(xline,yline);
plot(xline1,yline1);
plot(vx(:,k),vy(:,k),'bo');
text (vx(:,k)+tOff,vy(:,k)+tOff, sprintf('(%1.3d,%1.3d)', vx(:,k),vy(:,k))); %%%
plot(ux(:,k),uy(:,k),'r*');
text (ux(:,k)+tOff,uy(:,k)+tOff, sprintf('(%1.3d,%1.3d)', vx(:,k),vy(:,k))); %%%
axis([-25 25 -25 25]);
axis equal
axis manual
pause(.1);
hold off
这与您上面的代码相同,只是添加了一些内容,标记为 %%%
。
另请注意,hold on
只需指定一次,并将一直应用到 hold off
出现(或图形被销毁)。 (我删除了上面代码中多余的 hold on
指令)。