复杂运动的巢变换
这个示例创建了一个嵌套的转换对象层次结构,然后依次转换这些对象以从六个正方形创建一个立方体。该示例说明了如何将父转换对象转换为其他转换对象以创建层次结构,以及转换层次结构的成员如何影响下级成员。
这里有一个层次的说明。
的transform_foldbox
函数实现转换层次结构。的doUpdate
函数呈现每个步骤。将两个函数放在一个名为transform_foldbox.m
和执行transform_foldbox
。
函数transform_foldbox创建六个正方形并折叠%他们成一个立方体数字设置轴限制和视图轴(“投影”,“视角”,...“XLim”[0 4],...“YLim”[0 4],...“ZLim”,[0 3]) view(3);轴平等的;网格在创建转换对象的层次结构T (1) = hgtransform;T (2) = hgtransform(“父”t (1));T (3) = hgtransform(“父”t (2));T (4) = hgtransform(“父”t (3));T (5) = hgtransform(“父”t (4));T (6) = hgtransform(“父”t (5));%补丁数据X = [0 0 1 1];Y = [0 1 10 0];Z = [0 0 0 0];%文本数据Xtext = .5;Ytext = .5;Ztext = .15;%对应的对象对(补丁和文本)%被父化到对象层次中P (1) = patch(“FaceColor”,“红色”,“父”t (1));Txt (1) = text(“字符串”,“底”,“父”t (1));P (2) = patch(“FaceColor”,“绿色”,“父”t (2));Txt (2) = text(“字符串”,“对”,“父”t (2));P (3) = patch(“FaceColor”,“蓝”,“父”t (3));Txt (3) = text(“字符串”,“回来”,“颜色”,“白色”,“父”t (3));P (4) = patch(“FaceColor”,“黄色”,“父”t (4));Txt (4) = text(“字符串”,“高级”,“父”t (4));P (5) = patch(“FaceColor”,“青色”,“父”t (5));Txt (5) = text(“字符串”,“左”,“父”t (5));P (6) = patch(“FaceColor”,“红色”,“父”t (6));Txt (6) = text(“字符串”,“前面”,“父”t (6));%所有补丁对象使用相同的x、y、z数据集(p,“XData”, X,“YData”, Y,“ZData”, Z)设置文本对象的位置和对齐方式集(txt,“位置”,[text Ytext Ztext],...“HorizontalAlignment”,“中心”,...“VerticalAlignment”,“中间”)显示当前位置的对象doUpdate (1)设置初始转换在x中转换1个单位Tx = makhgtform (“翻译”,[1 0 0]);在y中转换1个单位Ty = makegtform (“翻译”,[0 10 0]);将单位正方形转换到所需的位置%显示drawnow和pause命令%每次转换后的对象组(t (2)“矩阵”Tx);doUpdate(1)组(t (3),“矩阵”、泰);doUpdate(1)组(t (4),“矩阵”Tx);doUpdate(1)组(t (5),“矩阵”、泰);doUpdate(1)组(t (6),“矩阵”Tx);doUpdate (1)指定旋转角度(pi/2弧度= 90度)折= /2;%旋转-y,平移xRy = makehgtform(“yrotate”倍);RyTx = Tx*Ry;%旋转x,平移yRx = makegtform (“xrotate”、折叠);RxTy = Ty*Rx;%设置转换%绘制后,每组转换和暂停组(t (6)“矩阵”, RyTx);doUpdate(1)组(t (5),“矩阵”, RxTy);doUpdate(1)组(t (4),“矩阵”, RyTx);doUpdate(1)组(t (3),“矩阵”, RxTy);doUpdate(1)组(t (2),“矩阵”, RyTx);doUpdate (1)结束函数doUpdate(延迟)drawnow pause(延迟)结束