2012-01-09 44 views
5

Tôi hiện đang làm việc trên biểu tượng 3D của một ngón tay di chuyển. Bạn có thể thấy trên hình dưới đây như thế nào nó trông như thế nào, vì nó sẽ là quá phức tạp để mô tả cách khác:Thêm chữ cái vào các điểm dữ liệu lô 3D trong Matlab

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

Đây là một phim hoạt hình, do đó nó di chuyển liên tục. Có một chấm cho mỗi ngón tay và một chấm cho lòng bàn tay. Tuy nhiên, tôi không thể theo dõi các ngón tay. Tôi đã cố gắng để cho họ những màu sắc khác nhau, nhưng nó không giúp được gì nhiều.

Vì vậy, câu hỏi là:

  • Có cách nào để thay thế các vòng tròn, hoặc bất kỳ biểu tượng khác, với một lá thư thực tế, hoặc từ thậm chí ngắn (3-4 chữ cái)?

  • Cách khác (và nó khá căng, nhưng tại sao không hỏi?), Có cách nào để vẽ các đường nối các dấu chấm này lại với nhau không? Đây là tùy chọn và tôi có thể mở một câu hỏi khác liên quan đến nó nếu cần.

Cảm ơn!

Đây là mã thực tế; Tôi biết nó còn lâu mới được mã hóa tao nhã, và xin lỗi về điều đó, nhưng nó hoạt động, mà đã là một bước tiến lớn đối với tôi:

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

và chức năng sử dụng:

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 

Tôi chỉ muốn đề cập đến điều này được dựa rất nhiều vào Jorge's answer on this question, vì vậy nhờ ông một lần nữa

Trả lời

6
  1. text(x,y,z,'string') thay vì plot3 nên làm việc trong việc thay đổi điểm đến văn bản nơi [x,y,z] là tọa độ của mỗi điểm bạn đang vẽ.
    Lưu ý: gọi tới set cần thay đổi từ set(hp3,'XData',x,'YData',y,'ZData',z) thành set(htext,'pos',[x,y,z]). Trường hợp hp3 là tay cầm cho đối tượng plot3-handlehtext là tay cầm đối tượng text-handle.

  2. Để kết nối các điểm có sử dụng đường dây plot3(X,Y,Z) trong đó X=[x_1,x_2,...,x_n], Y=[y_1,y_2,...,y_n]Z=[z_1,z_2,...,z_n].

+0

Cảm ơn! Chỉ cần chắc chắn, làm các dấu hiệu $ cho biết một báo bạn đang làm? Ngoài ra, tôi đang sử dụng một tập * ('X', 1, 'Y', 2, 'Z', 3) * tại một số điểm, mà vẫn tiếp tục trả về * Giá trị xấu cho thuộc tính văn bản: 'XLimInclude' *. Tôi đã thử đặt XLimInclude thành 'bật' và 'tắt', với cùng một kết quả, bạn sẽ có ý tưởng về nó từ đâu? Tôi sẽ thêm mã của tôi vào câu hỏi, vì vậy bạn có thể thấy vấn đề có thể ở đâu. –

+0

@Mikalichov Có $ định dạng (ví dụ: định dạng LaTeX của toán). Tôi đã thay đổi định dạng. Đối với hàm 'set', có thể thay đổi' 'X'' thành '' XData'' và tương tự cho' Y' và 'Z' trong lệnh gọi' set'. Không chắc chắn những gì khác để đề xuất. – Azim

+0

Vâng, tôi đã thử đầu tiên với 'XData', vv, nhưng đã trở lại một * "Không có tài sản 'XData' trong lớp 'văn bản'." * Lỗi, do đó việc sử dụng 'X', vv, thay vào đó. Tôi sẽ tiếp tục cố gắng trên các bài hát văn bản anyway, cảm ơn! –

Các vấn đề liên quan