我需要一些帮助来形成一个循环来绘制一些数据。
我有五个骨骼关节;每个JOINT矩阵包含x,y和amp; z坐标在某个时间点。 x,y和z是列,每行中的坐标。 e.g。
x y z
0.5 0.6 1.3
四个关节同步,同时捕获每个JOINTS 1,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),这也是非常方便的,因为最终我想看看关节之间的角度。
任何帮助将不胜感激
答案 0 :(得分: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