2012-01-09 70 views
5

我目前正在研究移动手指的3D表示。您可以在下面的图片中看到它的样子,因为它太复杂,否则来形容:在Matlab中向3D绘图数据点添加字母

hand representation http://img51.imageshack.us/img51/4747/handexample.png

这是一个动画,所以它要不停地移动。每个手指有一个点,手掌有一个点。但是,我无法跟踪手指。我试图给他们不同的颜色,但它没有什么帮助。

所以,问题是:

  • 有没有办法来代替圈,或任何其他标志,与实际的字母,甚至短字(3-4字母)?

  • 或者(这是相当长的一段时间,但为什么不问?),有没有办法将这些点连接起来?这是可选的,如有必要,我可能会提出另一个问题。

谢谢!

这里是实际的代码;我知道这是远远优雅编码和我对此很抱歉,但它的作品,这已经是对我来说是很大的一步:

clear all 
clc 

csv=csvread('pilot6/maindroite.csv',1,0); %read the values from a csv 
both = csv(:,2:19); 

ax=axes; 
set(ax,'NextPlot','replacechildren'); 

Dt=0.1; %sampling period in secs 

k=1; 
hp1=plot3(both(k,1),both(k,2),both(k,3),'ok'); %get handle to dot object 
hold on; 
hp2=plot3(both(k,4),both(k,5),both(k,6),'og'); 
hp3=plot3(both(k,7),both(k,8),both(k,9),'ob'); 
hp4=plot3(both(k,10),both(k,11),both(k,12),'oc'); 
hp5=plot3(both(k,13),both(k,14),both(k,15),'om'); 
hp6=plot3(both(k,16),both(k,17),both(k,18),'or'); 
hold off; 

t1=timer('TimerFcn','k=doPlot(hp1,hp2,hp3,hp4,hp5,hp6,both,t1,k)','Period', Dt,'ExecutionMode','fixedRate'); 
start(t1); 

和功能使用:

function k=doPlot(hp1,hp2,hp3,hp4,hp5,hp6,pos,t1,k) 

k=k+1; 
if k<5000%length(pos) 
    set(hp1,'XData',pos(k,1),'YData',pos(k,2),'ZData',pos(k,3)); 
    axis([0 255 0 255 0 255]); 
    set(hp2,'XData',pos(k,4),'YData',pos(k,5),'ZData',pos(k,6)); 
    set(hp3,'XData',pos(k,7),'YData',pos(k,8),'ZData',pos(k,9)); 
    set(hp4,'XData',pos(k,10),'YData',pos(k,11),'ZData',pos(k,12)); 
    set(hp5,'XData',pos(k,13),'YData',pos(k,14),'ZData',pos(k,15)); 
    set(hp6,'XData',pos(k,16),'YData',pos(k,17),'ZData',pos(k,18)); 

else 
    k=1; 
    set(hp,'XData',pos(k,1),'YData',pos(k,2),'ZData',pos(k,3)); 
    axis([0 255 0 255 0 255]); 
end 

我只是要提到这一点在很大程度上基于Jorge's answer on this question,所以再次感谢他

回答

6
  1. text(x,y,z,'string')代替plot3应该改变点工作到文本,其中[x,y,z]是您绘制的每个点的坐标。
    注:调用set需要改变从set(hp3,'XData',x,'YData',y,'ZData',z)set(htext,'pos',[x,y,z])。其中hp3plot3-handle对象的句柄,而htext是对象text-handle的句柄。

  2. 要连接点与线使用plot3(X,Y,Z)其中X=[x_1,x_2,...,x_n],Y=[y_1,y_2,...,y_n]Z=[z_1,z_2,...,z_n]

+0

谢谢!可以肯定的是,$符号是否表明您正在制作的报价?此外,我正在使用一个* set('X',1,'Y',2,'Z',3)*在某个点,它不断返回*文本属性的错误值:'XLimInclude'*。我尝试将XLimInclude设置为'on'和'off',结果相同,您是否知道它来自哪里?我会将我的代码添加到问题中,以便您可以看到问题的出现位置。 – 2012-01-09 18:58:49

+0

@Mikalichov是$是格式(即LaTeX格式的数学)。我改变了格式。至于'set'函数,或许在'set'的调用中将''X''改为''XData'',对'Y'和'Z'类似。不知道还有什么建议。 – Azim 2012-01-09 19:07:40

+0

嗯,我首先尝试了'XData'等,但得到了返回a *“在'text'类中没有'XData'属性。”*错误,因此使用'X'等。无论如何,我会继续在文本轨道上进行尝试,谢谢! – 2012-01-09 19:24:29