在Matlab中为3D图形数据点添加字母

5
我正在制作一个手指移动的3D模型。如下图所示,您可以看到它的样子,因为用语言描述太复杂了。 hand representation 这是一个动画,所以它一直在移动。每个手指有一个圆点,手掌也有一个圆点。然而,我不能跟踪手指。我尝试给它们不同的颜色,但帮助不大。
问题是:
  • 有没有办法用实际字母,甚至是短单词(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在此问题上的回答,所以再次感谢他。

1个回答

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])。其中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]


谢谢!只是想确认一下,$符号是您在引用吗?另外,我在某个地方使用了 *set('X',1,'Y',2,'Z',3)*,但它一直返回“文本属性的错误值:'XLimInclude'”。我尝试将XLimInclude设置为“on”和“off”,但结果相同,您有任何想法是从哪里出现的吗? 我会将我的代码添加到问题中,这样您就可以看到问题可能出在哪里。 - Cristol.GdM
@Mikalichov 是的,$符号是格式化符号(即数学LaTeX格式)。 我已更改格式。 至于set函数,也许可以在对set的调用中将'X'更改为'XData'Y和`Z也同理。 不确定还有什么其他建议。 - Azim J
我最初尝试使用“XData”等,但返回了一个“在'text'类中没有'XData'属性”的错误,因此改用“X”等。无论如何,我仍会继续在文本轨道上尝试,谢谢! - Cristol.GdM
请注意,如果您愿意,您也可以使用 text('Position',[x,y,z],'String',string) 创建文本对象。 - Nzbuu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接