2015-12-09 24 views
0

我需要一些幫助來形成一個循環來繪製一些數據。循環遍歷所有行並繪製MATLAB

我有五個骨骼關節;每個JOINT矩陣在某個時間點包含一個x,y座標。 x,y和z是列,即每一行中的座標。 例如

x y z 
0.5 0.6 1.3 

四個關節是同步的,每個JOINTS1,2,3和4同一行同時被捕獲。我試圖加入這些關節,看看用戶如何移動手臂。作爲參考,這些是在右臂捕獲的關節。關節1 =肩膀,2 =肘關節,3 =手腕,4 =手。

我希望能夠通過遍歷每一行並繪製直線來連續繪製這些關節。矩陣的大小總是隨着我跟蹤的人而變化,所以我需要循環遍歷每一行矩陣的1,2,3和4節點並繪製線,增加一行,然後繪製下一行。

小例子:

J = JOINT(1,:) 
% Joint rows varies between each user. I would like a function to 
% extract rows, plot, move onto next row, plot. (ideally with a second delay) 
X1 = J(:,1); 
Y1 = J(:,2); 
Z1 = J(:,3); 

line(X1 Y1 Z1) 

實際代碼:

CA = JOINT1(13,:); 
CB = JOINT2(13,:); 
CC = JOINT3(13,:); 
CD = JOINT4(13,:); 

X1 = CA(:,1); 
Y1 = CA(:,2); 
Z1 = CA(:,3); 
X2 = CB(:,1); 
Y2 = CB(:,2); 
Z2 = CB(:,3); 
X3 = CC(:,1); 
Y3 = CC(:,2); 
Z3 = CC(:,3); 
X4 = CD(:,1); 
Y4 = CD(:,2); 
Z4 = CD(:,3); 


line([X1, X2, X3, X4],[Y1, Y2, Y3, Y4], [Z1, Z2, Z3, Z4]); 

所以我相信它會是這樣的

[x y] = size(JOINT1); 
figure; 
for i=1:x 
    plot(JOINT1(i,:)); 
    hold on; 
    plot(JOINT2(i,:)); 
end 

我想看到這些在一秒鐘的延遲,但是一旦我將這種繪圖方法自動化,我可以自己嘗試一下!另外,如果有人知道我如何在每個關節的座標上(例如X1,Y1,Z1)繪製一個圓,這也是非常方便的,因爲我最終希望看到關節之間的角度。

任何幫助,將理解

+2

請提供一個[最小,完整的,並且可驗證](http://stackoverflow.com/help/mcve)的例子。 – excaza

+0

是否要在每個時間步連接所有關節(即在時間1時關節1,2,3,4形成一個多邊形,在時間2時它們形成多邊形等),或者連接一個關節,即連接關節1在t1等於t2的關節1等,t1的關節2連接t2的關節2等? – Adriaan

+0

我想現在我想連接每個時間步的所有關節。因此,在上面貼出的示例中,我在第13秒加入座標(我正在通過每個關節的行進行手動循環),但是我希望它在每一行之間繪製第二個延遲。 –

回答

0
name_matrix = {'JOINT2' 'JOINT3' 'JOINT4'}; 
coord = {'X' 'Y' 'Z'}; 
for r = 1:size(JOINT2,1); 
    for index = 1:3 
    eval([ 'matrix = ' name_matrix{index} ';' ]) 
    for c = 1:3 
     eval ([ coord{c} num2str(index) ' = matrix(r,c);']) 
    end 

end 
line([X2 X3 X4], [Y2 Y3 Y4], [Z1 Z2 Z3]); 
pause(1); 
end