之前做了,效果如下:
每个小立方体的颜色都是一样的
有老师问:可以修改成一面一色吗?还有老师问:可以修改成一层一色吗?
都可以!先解决第一个问题。
让所有立方体的同一面都是同一色,效果如下:
制作思路:
源于:《哪里需要立方体就点哪里》
在开始制作前:
■ 为了方便看效果和设置,需要显示所有立方体,也就是修改用来计数的n1,n2,……,n25的值,于是,输入:
执行(序列("n" k "=0",k,1,25))
■ 并隐藏原先的立方体c1,c2,……,c25
注:执行(Execute)、序列(Sequence)。
指令只需敲六条,各位不妨一试。01至04部分为解释,05为细节完善,使得效果更佳。
“上”“下” “左”“右” “前”“后”面
源文件获取方式请见文末。
最简单的,就是对立方体的下面进行涂色。
以第一小格子的立方体为例,当其立方体个数大于0时,则需要显示面。即: 如果(n1 != -1, B1)
■ 于是,可批量构造所有立方体的下面:
执行(序列("X" k "=If(n" k "!=-1,B" k ")",k,1,25))
■ 并设置颜色,至于线径、不在绘图区显示,将在构造出所有面后,再进行设置。
只需要做出每一栋立方体的最上面即可。
也就是将底面进行平移,以第一栋立方体为例:如果(n1 != -1, 平移(B1, 向量((0, 0, n1 1))))
■ 于是,可批量构造:
执行(序列("S" k "=If(n" k "!=-1, Translate(B" k ", Vector((0,0,n" k " 1))))",k,1,25))
以第一小格子的立方体为例:所有左面可由底面B1绕其左边所在直线旋转至左面,再平移得到!需要注意的是,平移所得的左面应是所有立方体的左面,是一系列面,可用序列指令:
先旋转后平移
这样就可以得到第一栋立方体的所有左面!而第2,3,……,25栋立方体的左面呢?
关键是找出它们旋转轴的特点,就可用执行指令!
找出旋转轴规律
■ 于是,可批量构造:
执行(序列("Z" u "=Sequence(Translate(Rotate(B" u ", -90°,Line((Mod(" (u-1) ",5) ,0,0),yAxis)), Vector((0,0,v))),v,0,n" u ")",u,1,25))
得到所有左面:
■ 要得右面,将上述指令略作修改即可:
主要是修改旋转角度、旋转轴
执行(序列("Y" u "=Sequence(Translate(Rotate(B" u ", 90°,Line((Mod(" (u-1) ",5) 1,0,0),yAxis)), Vector((0,0,v))),v,0,n" u ")",u,1,25))
前面也可由底面先旋转再平移得到。
旋转得到左、右面的旋转轴规律是与余式有关,而前、后面则与商式有关:
■ 得到所有前面:
执行(序列("Q" u "=Sequence(Translate(Rotate(B" u ", 90°,Line((0, Div(" (u-1) ",5),0),xAxis)), Vector((0,0,v))),v,0,n" u ")",u,1,25))
■ 将上述指令略作修改:
执行(序列("H" u "=Sequence(Translate(Rotate(B" u ", -90°,Line((0, Div(" (u-1) ",5) 1,0),xAxis)), Vector((0,0,v))),v,0,n" u ")",u,1,25))
得到所有后面:
选中所有面,设置线径为1,不在绘图区显示:
目前效果如下:
为了让效果更好,还可以给立方体加上棱!让界线更明显!
无需另外构造立方体的棱,因为已有立方体c1,c2,……,c25,将其线径调为2。
而刚刚已将面的线径调为1。所以效果如下:
原先立方体颜色:#006699
和预想的不一样?不急——再将所有面放在图层1,而立方体c1,c2,……,c25调为灰色,效果就有了:
立方体颜色调为:#606060
如果要分为涂色与否的话,多做几步:
■ 新建复选框c,标题为$\Large \textcolor{red}{涂}\textcolor{blue}{色}$,更新时脚本为:执行(序列("SetColor(c" k ",If(c,%1,%2))",k,1,25),"#606060","#006699")
■ 选中所有面,显示条件设为c
至此,作品就完成了:
如需源文件,请回复:立方体堆叠。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved