2012-01-09 21 views
5

Actualmente estoy trabajando en una representación en 3D de mover los dedos de la mano. Se puede ver en la imagen siguiente cómo se ve, ya que sería demasiado complicado para describir de otro modo:Agregar letras a puntos de datos de trazado 3D en Matlab

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

Es una animación, por lo que se está moviendo constantemente. Hay un punto por cada dedo y un punto por la palma. Sin embargo, no puedo hacer un seguimiento de los dedos. Traté de darles diferentes colores, pero no ayuda mucho.

Así que la pregunta es:

  • ¿Hay una manera de reemplazar los círculos o cualquier otro símbolo, con una carta real, o incluso palabra corta (3-4 letras)?

  • Alternativamente (y es bastante extenso, pero ¿por qué no preguntar?), ¿Habría alguna forma de dibujar líneas uniendo estos puntos? Esto es opcional, y podría abrir otra pregunta si es necesario.

Gracias!

Aquí está el código real; Sé que está lejos de ser elegante codificación, y siento por él, pero funciona, que ya es un gran paso para mí:

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); 

y la función utilizada:

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 

acabo quiero mencionar esto se basa en gran medida en Jorge's answer on this question, así que gracias a él de nuevo

Respuesta

6
  1. text(x,y,z,'string') en lugar de plot3 deben trabajar en el cambio de los puntos de texto donde [x,y,z] es la coordenada de cada punto que está trazando.
    Nota: llamadas a set tendrán que cambiar de set(hp3,'XData',x,'YData',y,'ZData',z) a set(htext,'pos',[x,y,z]). Donde hp3 es el identificador de un objeto plot3-handle y htext es un identificador de un objeto text-handle.

  2. para conectar los puntos con una línea de uso plot3(X,Y,Z) donde X=[x_1,x_2,...,x_n], Y=[y_1,y_2,...,y_n] y Z=[z_1,z_2,...,z_n].

+0

¡Gracias! Solo para estar seguro, ¿los signos $ indican una cotización que está haciendo? Además, estoy usando un * set ('X', 1, 'Y', 2, 'Z', 3) * en algún punto, que sigue volviendo * Valor incorrecto para la propiedad de texto: 'XLimInclude' *. Intenté configurar XLimInclude en 'on' y 'off', con los mismos resultados, ¿tendría una idea de dónde viene? Agregaré mi código a la pregunta, para que pueda ver dónde podría estar el problema. –

+0

@Mikalichov Sí, los $ formateaban (es decir, el formato LaTeX de las matemáticas). Cambié el formato. En cuanto a la función 'set', quizás cambie' 'X'' a''XData'' y similar para 'Y' y' Z' en la llamada a 'set'. No estoy seguro de qué más sugerir. – Azim

+0

Bueno, lo intenté primero con 'XData', etc., pero obtuve un * "No hay propiedad 'XData' en la clase 'text'." * Error, de ahí el uso de 'X', etc., en su lugar. Seguiré probando la pista de texto de todos modos, ¡gracias! –