【教程084】电磁波的3ds Max画法
小编:复旦博士,3D软件资深玩家,非主流码农
在你眼中3ds Max也许只是个绘图软件,但在小编看来,这是一款很好用的数字图像化软件。只要我愿意,它可以化身Excel,化身Origin,甚至实现MATLAB的作图功能。这一切只因为她——MAXScript(max脚本语言)。
脚本编辑给了像我这类软件使用者极大的创作空间。颜色有RGB值,反射折射比有菲涅尔公式,全局光照还有蒙特卡洛算法,这个世界归根到底是可以数字化的,凭什么就非得按照一款软件自身设定的逻辑来描绘我脑海中的图像?
所以,请丢掉3ds Max绘图太随意,数理性不强的刻板偏见,今天的教程就教大家一波新操作:用max绘制一个标准的正弦波。
在3ds Max中,你可以轻轻松松画出一个圆、一段弧,甚至一条螺旋线,但函数图像千千万,如果要你画抛物线、双曲线呢?作为一个资深软件玩家,如果回答说不会,是不是有点尴尬?
那么,化解尴尬的第一步,我们先得知道Maxscript是怎么创建样条线的。
新建脚本,输入下列语句:
b = splineshape()
addnewspline b
addknot b 1 #corner #line [0,0,0]
addknot b 1 #corner #line [10,0,0]
updateshape b
运行之后,你会在视图中看到生成了一条线段,端点分别是(0,0,0)和(10,0,0)。这就是以上代码的含义,先生成一个样条线图形,然后给这个图形设置端点,最后连线。
有了这个基础,创建正弦曲线就再简单不过了,y = sin x嘛,谁不知道?所以只要加一个for循环,正弦曲线就有了。
n = 120
for i = 1 to n do
(
b = splineshape()
addnewspline b
addknot b 1 #corner #line [2*pi*(i-1)/n,sin(360*(i-1)/n),0]
addknot b 1 #corner #line [2*pi*i/n,sin(360*i/n),0]
updateshape b
b.wirecolor = red
)
得到的曲线如图所示
这条正弦曲线是由n条小线段组成的,创建成功后可以附加到一起,选择任一段,点击附加多个,全选其他线段后附加。一条正弦曲线就画完了。
除了正弦曲线外,可能有些同学还要画一些箭头表示波的强度,方法还是一样,只要把for循环中两个顶点坐标改成如下所示就好了:
addknot b 1 #corner #line [2*pi*i/n,0,0]
addknot b 1 #corner #line [2*pi*i/n,sin(360*i/n),0]
运行后得到的图形如下,如果觉得太密,可以把n值设小一点。
比如n = 12,开启样条线渲染可见,径向厚度设为0.03时,运行如下语句:
这里的箭头是用圆锥体创建的,一句完整的创建脚本为:
c = Cone smooth:on heightsegs:1 capsegs:1 sides:24 height:0.18 radius1:0.065 radius2:0.01 mapcoords:on pos:[2*pi*i/n, sin(360*i/n)-0.18, 0] wirecolor:blue
这些参数就是在创建圆锥体时会用到的参数,唯一要注意的就是坐标应随着x增大呈正弦曲线变化。
运行得到结果如下,π和2π处的两个圆锥箭头是多余的,可以删除。
y方向的振幅乘以一个倍数系数就可以自由调节:
另一个垂直方向的波则可以通过改变for循环中的坐标值,或者整体旋转90度来得到:
至此,一个电磁波的三维空间示意图就画完了。有了正弦函数的绘制基础,其他函数还不是手到擒来?大家拿其他方程去尝试吧。
本期教程到此结束,感谢大家的观看。
更多教程欢迎关注“3D科研绘图”,有问题可以在后台留言,或者加入我们的QQ学习交流群(群号见下方图片,1群已满可加2群)。