【发布时间】:2015-02-25 06:20:22
【问题描述】:
我用“scatter3”制作了 3D 动画 (.avi)。我有 3 组数据点,其中 X,Y(均为 1 x 24 矩阵)是固定数据点,Z 是 485 x 24 矩阵 (只有 Z 坐标随时间变化)。
我还包括使用“网格”的网格,其中所有数据点的 z 都等于 0。 这只是为了说明平面 z=0,因为我的数据点在 -14 和 15 之间交替。
现在我想为每个点添加动态标签 (24)。我用“文本”做了这个 但它根本不起作用,因为在动画期间标签被完全涂抹。 动画一个一个地显示标签位置,但问题是动画不会删除所有以前的 显示 next 之前的标签位置。
这是我创建动画的代码部分:
...
X=[]; % x - coordinate for each of 24 points
Y=[]; % y - coordinate -||-
Z=[]; % z - coordinate -||-
labels=[]; % 24 different labels
a=1:1:24;
b=1:1:24;
[aa bb]=meshgrid(a,b);
c=aa*0+bb*0;
writerObj=VideoWriter('my_animation.avi');
open(writerObj);
frames=485;
mov(1:n_frame)=struct('cdata',[],'colormap',[]);
set(gca, 'nextplot','replacechildren');
f=figure(1);
set(f,'Position',[150 80 1600 900]);
plot_1=scatter3(X,Y,Z(1,:)); % all 24 points at time t=0;
hold on;
net=mesh(a,b,c,'EdgeColor',[0 0 0],'FaceColor','none'); % grid at z=0
for k=1:frames
set(plot_1, 'ZData',Z(k,:)); % "k" goes from 1 to 485 for all 24 points
set(net, 'ZData'); % mesh is static all the time
text(X,Y,Z(k,:),labels); % each point has its own label
view(-30,50);
mov(k)=getframe(gcf);
writeVideo(writerObj,mov(k));
end
有什么想法可以解决这个问题吗?我尝试在 for 循环中使用“drawnow update”和“refreshdata”,但没有帮助。
【问题讨论】:
-
那么你有没有尝试我的建议??它对你有用吗?
-
嗨,很抱歉我迟到了。是的,你的建议很棒。一切都按我的计划进行。如果你不介意我对我的帖子还有其他问题。
-
那太好了!您可以将其标记为已接受以关闭线程吗?今晚晚些时候我会调查你的新问题:)
-
如何将其标记为已接受?我应该怎么办?对不起,我是新人,我不知道这里的工作原理:)。
-
好的,我想出了如何做到这一点。 :)