我正在制作一个手指移动的3D模型。如下图所示,您可以看到它的样子,因为用语言描述太复杂了。
这是一个动画,所以它一直在移动。每个手指有一个圆点,手掌也有一个圆点。然而,我不能跟踪手指。我尝试给它们不同的颜色,但帮助不大。
问题是:
以下是实际代码;我知道它和优雅的编码相去甚远,对此我感到抱歉,但它可以工作,这已经是一个很大的进步了。
![hand representation](https://istack.dev59.com/Ct7Ao.webp)
问题是:
- 有没有办法用实际字母,甚至是短单词(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在此问题上的回答,所以再次感谢他。
set
函数,也许可以在对set
的调用中将'X'
更改为'XData'
,Y
和`Z也同理。 不确定还有什么其他建议。 - Azim Jtext('Position',[x,y,z],'String',string)
创建文本对象。 - Nzbuu