主要内容

复杂运动的嵌套变换

此示例创建变换对象的嵌套层次结构,然后依次变换这些对象以从六个正方形创建立方体。该示例演示了如何将变换对象设置为其他变换对象的父对象以创建层次,以及变换层次的成员如何影响从属成员。

下面是层次结构的图示。

这个转换折叠盒函数实现转换层次结构。这个更新函数渲染每个步骤。将这两个函数放在名为转换\u foldbox.m执行转换折叠盒.

功能转换折叠盒%创建六个正方形并折叠%把它们做成一个立方体图形%设置轴限制和视图轴线('投影','透视图',...'XLim',[0 4],...'伊林',[0 4],...'兹利姆',[0 3])视图(3);轴平等的; 网格%创建变换对象的层次t(1)=变换;t(2)=变换('父级',t(1));t(3)=变换('父级',t(2));t(4)=变换('父级',t(3));t(5)=变换('父级',t(4));t(6)=变换('父级',t(5));%修补程序数据X=[0 0 1 1];Y=[0 1 1 0];Z=[0];%文本数据Xtext=.5;Y文本=.5;Ztext=.15;%对应的对象对(面片和文本)%是对象层次结构的父对象p(1)=贴片('面颜色',“红色”,'父级',t(1));txt(1)=文本('字符串','底部','父级',t(1));p(2)=贴片('面颜色','绿色','父级',t(2));txt(2)=文本('字符串','对','父级',t(2));p(3)=贴片('面颜色','蓝色','父级',t(3));txt(3)=文本('字符串','返回','颜色',“白色”,'父级',t(3));p(4)=贴片('面颜色','黄色','父级',t(4));txt(4)=文本('字符串','顶部','父级',t(4));p(5)=贴片('面颜色','青色','父级',t(5));txt(5)=文本('字符串','左','父级',t(5));p(6)=贴片('面颜色','洋红色','父级',t(6));txt(6)=文本('字符串','前面','父级',t(6));%所有面片对象都使用相同的x、y和z数据设置(p,'扩展数据',X,'数据'Y'ZData'数据,Z)%设置文本对象的位置和对齐方式设置(txt,'位置',[Xtext Ytext Ztext],...'水平对齐','中心',...'垂直对齐','中间')%在当前位置显示对象更新(1)%设置初始转换%在x中平移1个单位Tx=制作模板('翻译',[1 0 0]);%在y轴上平移1个单位Ty=制作模板('翻译',[0 1 0]);%将单位正方形平移到所需位置%此时将显示drawnow和pause命令%每次翻译后的对象设置(t(2),'矩阵',德克萨斯州);更新(1)套(t(3),'矩阵',泰);更新(1)套(t(4),'矩阵',德克萨斯州);更新(1)套(t(5),'矩阵',泰);更新(1)套(t(6),'矩阵',德克萨斯州);更新(1)%指定旋转角度(pi/2弧度=90度)折叠=pi/2;%旋转-y,平移xRy=制作模板('酪酸盐',-倍);RyTx=Tx*Ry;%旋转x,平移yRx=制作模板('X旋转',折叠);RxTy=Ty*Rx;%设置变换%每组变换后画图并暂停设置(t(6),'矩阵',RyTx);更新(1)套(t(5),'矩阵',RxTy);更新(1)套(t(4),'矩阵',RyTx);更新(1)套(t(3),'矩阵',RxTy);更新(1)套(t(2),'矩阵',RyTx);更新(1)结束功能doUpdate(延迟)drawnow pause(延迟)结束