查看原文
其他

【图释016】环形阵列的MAXScript脚本

图灵 3D科研绘图 2021-12-21

一段枯燥的代码背后,是一个程序员自以为很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学习交流群提问。那里可是有众多绘图大神哦~



: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存