История рисования точки в анимации 3Dplot в Matlab

У меня есть несколько 3D-точек в Matlab, и я сделал анимацию из этих точек, используя 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 на протяжении всей анимации, показывая трек ее движения.

заранее спасибо.


person Mirza Awais Ahmad    schedule 25.07.2015    source источник
comment
что такое rf_P0? Код выдает ошибку   -  person Benoit_11    schedule 25.07.2015
comment
извините, я вытащил кусок кода из большого файла, перепутал несколько имен переменных.   -  person Mirza Awais Ahmad    schedule 25.07.2015


Ответы (1)


Если я понимаю, что вы хотите (и ваш формат данных), вы можете сделать это, построив линию для всех предыдущих значений до текущего значения точки каждый раз, удалив предыдущее, например.

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

Другой вариант — перерисовывать все каждый раз (вместо использования метода set handle), каждый раз очищать весь график и заново отображать новые точки и историю.

person Ed Smith    schedule 25.07.2015