2012-11-19 9 views
5

Chciałbym wizualizować ruch punktu danych w przestrzeni przez pewien okres czasu w ramach MATLAB. Jednak sposób, w jaki chcę, aby moja postać była wyświetlana, jest taka, że ​​w danym momencie wykreślana jest tylko jedna chwila. To było łatwe, po prostu utworzyłem pętlę for, aby zaktualizować mój wykres 3D dla każdego zestawu współrzędnych (x, y, z) w moich danych. Jednak chciałbym wyświetlać 4 różne kąty widzenia tego wykresu przez cały czas. Jestem świadomy, jak skonfigurować subplots w MATLAB, to nie jest problem. Mój problem polega na tym, aby wszystkie 4 wątki działały jednocześnie, tak aby wszystkie 4 wątki zawsze wyświetlały ten sam punkt w czasie.MATLAB rysuje ruchome punkty danych w osobnych partiach jednocześnie

Byłbym wdzięczny, gdyby ktoś mógł zasugerować, jak sobie z tym poradzić.

Zgodnie z wnioskiem, mój kod na postać z pojedynczym wykresie przedstawiono poniżej:

datan = DATA; %data in form of x,y,z,a,b,c by column for row# of time points 

tib=zeros(size(datan,1),12); 
tib(:,1:3) = datan(:,1:3); 
tib_ref=tib(1,1:3); 

for i=1:size(datan,1) 
tib(i,1:3)=tib(i,1:3)-tib_ref; 
end 

angle_to_dircos 

close all 

figure('Name','Directions (Individual Cycles)','NumberTitle','off') 

for cc=1:2 
    hold off 
    for bb=1:10:size(tib,1); 
    scatter3(tib(bb,1),tib(bb,2),tib(bb,3),'green','filled'); %z and y axes are flipped in polhemus system 
    hold on 
     p0 = [tib(bb,1),tib(bb,2),tib(bb,3)]; 
     p1 = [tib(bb,1)+10*tib(bb,4),tib(bb,2)+10*tib(bb,5),tib(bb,3)+10*tib(bb,6)]; 
     p2 = [tib(bb,1)+10*tib(bb,7),tib(bb,2)+10*tib(bb,8),tib(bb,3)+10*tib(bb,9)]; 
     p3 = [-(tib(bb,1)+100*tib(bb,10)),-(tib(bb,2)+100*tib(bb,11)),-(tib(bb,3)+100*tib(bb,12))];  
     vectarrow(p0,p1,1,0,0) 
     hold on 
     vectarrow(p0,p2,0,1,0) 
     hold on 
     vectarrow(p0,p3,0,0,1) 
     hold on 
    az = 90; 
    el = 0; 
    view(az, el); 
    xlim([-50,50]); 
    ylim([-50,50]); 
    zlim([-50,50]); 
    xlabel('distance from center in X'); 
    ylabel('distance from center in Y'); 
    zlabel('distance from center in Z'); 
    title('XYZ Scatter Plots of Tracker Position'); 
    hold on 
    plot3(0,0,0,'sk','markerfacecolor',[0,0,0]); 
     p0 = [0,0,0]; 
     p1 = [10,0,0]; 
     p2 = [0,10,0]; 
     p3 = [0,0,100];  
     vectarrow(p0,p1,1,0,0) 
     hold on 
     vectarrow(p0,p2,0,1,0) 
     hold on 
     vectarrow(p0,p3,1,0,1) 
    drawnow; 
end 
end 
+0

mógłbyś udostępnić swój kod na jednym rysunku, dzięki czemu możemy lepiej zrozumieć, co chce zrobić? – HebeleHododo

+0

Byłbym szczęśliwy. Jednak mój kod jest zbyt długi dla tej sekcji komentarzy. Czy istnieje lepszy sposób na udostępnianie kodu tutaj? –

+0

Możesz edytować swój wpis? – HebeleHododo

Odpowiedz

4

Jeśli używasz set zaktualizować X i Y-dane swoich punktów, zamiast odtworzenia fabuły całkowicie każdy czas, aktualizacja będzie równoległa dzięki Matlabowi czekającemu na drawnow.

Oto przykład

figure, 
subplot(1,2,1),plot(rand(10,1),rand(10,1),'.'),hold on,p1=plot(rand(1),rand(1),'.r') 
subplot(1,2,2),plot(rand(10,1),rand(10,1),'.'),hold on,p2=plot(rand(1),rand(1),'.r') 

%# read the red coordinates - I should have stored them before plotting :) 
x(1) = get(p1,'xdata');y(1)=get(p1,'ydata');x(2)=get(p2,'xdata');y(2)=get(p2,'ydata'); 

%# animate 
for i=1:100, 
    delta = randn(1,2)*0.01; 
    x=x+delta(1); 
    y=y+delta(2); 
    set(p1,'xdata',x(1),'ydata',y(1)); 
    set(p2,'xdata',x(2),'ydata',y(2)); 
    pause(0.1), 
    drawnow, %# I put this in case you take out the pause 
end 
+0

Dziękuję Jonas. Chociaż nie rozwiązało to jednoznacznie mojego problemu, ponieważ mam współrzędne 3D i nie ma polecenia "zdata" dla mnie, aby wywołać trzecie wejście, twój kod dał mi nowy pomysł, jak się do tego zbliżyć. –

+0

@NateB: Istnieje właściwość 'zdata', którą można zaktualizować podobnie do' xdata' i 'ydata'. A może odnosiłeś się do mojego przykładu 2D? – Jonas

+0

Jest zdata? Mam 2010b i ciągle powtarza mi, że parametr zdata nie istnieje i nie mogłem go znaleźć w dokumentacji. No cóż, to nie jest wielka sprawa, ponieważ teraz mam funkcjonalny kod oparty na twojej sugestii. Dzięki! –

Powiązane problemy