如何在动画中移动圆圈后添加标签?

时间:2016-08-23 08:07:47

标签: matlab animation text 3d labels

我读了一些相关的讨论:

How to add dynamic data labels inside of .avi animation?

Text Animation with MATLAB

这些例子比我的要困难,所以我不太明白如何解决我的问题。

我做了以下动画,我只想

  1. 添加标签" {E}"在"中心蓝点"
  2. 添加标签" {P}"靠近"小蓝圈",旋转"中心蓝点"在"中间的蓝色圆圈内#34;
  3. 添加标签" {S}"靠近"小红色",旋转"大蓝圈"。
  4. 当然,标签{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
    

    enter image description here

    抱歉,我不知道上传动画视频。这只是它的图片。

1 个答案:

答案 0 :(得分:1)

您可以使用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说明。)

GUIs