2012-11-19 23 views
5

MATLAB içerisinde bir zaman dilimi boyunca bir veri noktasının hareketini görsel olarak göstermek istiyorum. Ancak, şeklimin gösterilmesini istediğim şekilde, herhangi bir zamanda sadece bir anın çizileceği şekildedir. Bu kolaydı, verilerimdeki her bir koordinat kümesi (x, y, z) için 3D grafik ekranımı güncellemek için bir for döngüsü oluşturdum. Ancak, bu arsanın 4 farklı bakış açısını her zaman göstermeyi diliyorum. MATLAB içinde alt piksellerin nasıl kurulacağının farkındayım, sorun bu değil. Sorunum, bu alt bölümlerin 4'ünün eşzamanlı olarak yürütülmesini sağlamaktır, böylece tüm 4 alt yazı her zaman aynı noktayı zaman içinde görüntüler.MATLAB Materyalleri ayrı ayrı ayrı alt noktalardaki veri noktalarının hareketli olarak izlenmesi

Bu sorunun nasıl üstesinden gelebileceğini önermek isterse memnun olurum. İstendiği gibi

, tek parselde ile bir rakam benim kod aşağıda gösterilmiştir:

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

var? – HebeleHododo

+0

Mutlu olurum. Ancak, bu yorumlar bölümü için kodum çok uzun. Kodu burada paylaşmanın daha iyi bir yolu var mı? –

+0

Gönderinizi düzenleyebilir misiniz? – HebeleHododo

cevap

4

Eğer noktalarının x ve y-verileri güncelleştirmek için set kullanırsanız, daha doğrusu tamamen her arsa yeniden daha zaman, güncelleme Matlab drawnow için beklerken eşzamanlı olacak.

Burada yapmaya çalıştığını ne daha iyi anlamak böylece bir rakam için kodunuzu paylaşabilir misiniz örneği

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

Teşekkür ederim Jonas. Bu, 3D koordinatlarım olduğu için benim problemimi açık bir şekilde çözmese de ve 3. girdiyi çağırmam için 'zdata' çizim komutu yokken, kodunuz bana buna nasıl yaklaşılacağı konusunda yeni bir fikir verdi. –

+0

@NateB: "xdata" ve "ydata" ile benzer şekilde güncelleştirebileceğiniz bir 'zdata' özelliği vardır. Yoksa 2B örneğime mi atıyordun? – Jonas

+0

Bir zdata var mı? 2010b sahibiyim ve bana zdata parametresinin mevcut olmadığını ve belgelerde bulamadığımı söylüyor. Ah, şimdi öneriye dayalı işlevsel bir kod var gibi büyük bir anlaşma değil. Teşekkürler! –

İlgili konular