在Matlab中绘制3Dplot动画中点的历史



我在Matlab中有几个3D点,我用plot3从这些点制作了一个动画。点存储在数组中,然后其中一些点与线连接。代码如下:

tstart = 0.0;
tend = 5;
tsim = tend - tstart;
dt = 0.001;
Dn = tsim/dt + 1;
t0 = 5.0/dt;
f = 0.4;
for(i=1:Dn)
    t(i) = tstart + (i-1)*dt;
    rf_P0(i) = sin(2*pi*f*t(i));
    rf_P1(i) = cos(2*pi*f*t(i));
end
figure(1);
set(gcf,'Renderer','OpenGL');
RF_P0 = plot3(rf_P0(1,1),rf_P0(1,2),rf_P0(1,3),'o','MarkerSize',10,'MarkerFaceColor','r'); % point 1
hold on;
RF_P1 = plot3(rf_P1(1,1),rf_P1(1,2),rf_P1(1,3),'o','MarkerSize',10,'MarkerFaceColor','r'); % point 2
RF_D0 = plot3([rf_P0(1,1) rf_P1(1,1)], [rf_P0(1,2) rf_P1(1,2)], [rf_P0(1,3) rf_P1(1,3)],'LineWidth',4,'Color','k'); %line from point 1 to 2
i = 1;
while i<=size(rf_P0,1)
     set(RF_P0,'XData',rf_P0(i,1),'YData',rf_P0(i,2),'ZData',rf_P0(i,3));
     set(RF_P1,'XData',rf_P1(i,1),'YData',rf_P1(i,2),'ZData',rf_P1(i,3));
     set(RF_D0,'XData',[rf_P0(i,1) rf_P1(i,1)],'YData',[rf_P0(i,2) rf_P1(i,2)],'ZData',[rf_P0(i,3) rf_P1(i,3)]);
     drawnow;
     i=i+1;
 end

这很好,这将使两个点和它们之间的线的运动产生动画。在每次迭代中,点和线都被擦除并重新绘制。现在我想要做的是,我想要展示其中一个点的运动历史,而所有其他点和线都应该像往常一样移除并重新绘制。假设我想在整个动画中"保持"点1的绘图,以显示其运动轨迹。

如果我理解你想要的(和你的数据格式),你可以做到这一点,绘制一条线,所有以前的值,直到当前的点值,每次删除前一个,例如

delete(rf_histline);
rf_histline= plot3(rf_P0(1:i,1),rf_P0(1:i,2),rf_P0(1:i,3),'-');

另一种选择是每次重新绘制所有内容(而不是使用set handle方法),每次清除整个绘图并重新绘制新的点和历史。

相关内容

  • 没有找到相关文章

最新更新