Добавление букв к точкам данных 3D-графика в Matlab - PullRequest
5 голосов
/ 09 января 2012

В настоящее время я работаю над трехмерным изображением движения пальцев руки.На рисунке ниже вы можете увидеть, как это выглядит, поскольку было бы слишком сложно описать иначе:

представление руки 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

Я просто хочу упомянуть, что это в значительной степени основано на ответе Хорхе на этот вопрос , так что спасибо ему еще раз

1 Ответ

6 голосов
/ 09 января 2012
  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]).Где hp3 - дескриптор объекта plot3-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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...