【图释016】环形阵列的MAXScript脚本
一段枯燥的代码背后,是一个程序员自以为很NB的无聊人生。——图灵
昨天QQ群里有人问了个问题:环形阵列的MAXScript脚本如何编写?
我心里的小火苗当时腾的一下就蹿起来了,瞥了眼此人的QQ群名片,武理-XXX。虽然对武汉理工的第一印象不好(主要是因为王攀事件),但此位仁兄的提问又隐隐让我觉得武汉理工的学生不简单。
嗯,很不简单。
首先,对MAX脚本感兴趣的人本就不多,会画图不就得了,学MAXScript又有什么用?对这类问题我基本不作回答,觉得没用不学就好了,这年头求着人学习是最没意思的。
再者,这个问题乍一看很基础,但真要实现起来也得费点心思。如果想不出来还真的不知去哪里才能问到答案。但既然问到我这儿了,就不能让你空手而归。
阵列的脚本之前在【教程062:一个简单的多孔结构】中有讲过,但环形阵列又稍有不同。
我们先来看一个简单的例子:
这种环形阵列可以先将一个对象的轴心移动到旋转中心的位置,然后用旋转阵列实现。但如果要用MAXScript来实现,首先得算一算每个阵列对象的位置和旋转角度。
由上图可知,假设阵列的半径为r,则每个点对应的坐标分别为(r*(1-cosθ),r*sinθ,0)。据此,打开菜单栏中的脚本>>新建脚本,输入如下语句:
第1行:创建一个分段为4的茶壶,赋值为b;
第2、3行:阵列数为6,每次旋转360/6 = 60度;
第4行:设置阵列半径r = 100;
第5-8行:for循环语句
copy b即克隆对象b,pos:[x,y,z]表示位置坐标;
rotate b之前讲过,旋转语句。
得到结果如下:
茶壶嘴并没有朝向中心,只需在前面加一句旋转语句就好了。
此时结果就正确了——
环形阵列的半径可通过修改r的值改变,阵列的个数也可通过改变n来实现。
n = 8
n = 10
其实,写到这里并没太多意思。哪怕再加三句使得所有对象都实例关联起来,也没多大成就感。
MAXScript用来创建一个环形阵列实在是大材小用,但这些语句都是基础,不把基础学好了,罔谈实现更高级的效果。
而MAXScript的好处在于,只需要对语句进行简单修改,就可以实现平时难以达到的效果。
比如逐步放大的阵列:
再比如螺旋的阵列(本来是想做个阿基米德螺旋线的,但时间不够了,以后有空再编):
还有更多的效果也是轻而易举的事情——
好了,差不多了,再玩就要被玩坏了。还是给大家保留点神秘感比较好,别傻到想跟着我学MAXScript的地步了,今天的图释就到这里结束吧。
有任何跟科研绘图相关的问题,欢迎在微信平台留言,或者加入下图中的QQ学习交流群提问。那里可是有众多绘图大神哦~