花了一些时间,好不容易《代码本色》这本书看的差不多。
作者通过使用processing模拟了自然系统的许多物体,这让我不禁思考:如果这个世界都可以用代码模拟,那一定会很奇妙。
作者通过代码,模拟浮力、重力、弹力可以模拟出宇宙星体,弹簧等等,用粒子系统、噪声做出自然界各种各样有着类似特点的物体。
在老师之前给的许多例子中,我看到了一个很有趣的“弹簧”:
它让我想到了原来想要“摘星星”的童年,如果天上的物体都可以拿下来,又会弹上去,放在动画里也许会很有趣。
因为我想要的通过p5来完成大作业,所以我在p5.js官网的例子中寻找类似的弹力作用。
很明显这跟我们平时的物理公式很像
摩擦力f=-kx
加速度a=f/m
我根据processing的例子,将他们统统用线串起来,因为其中用重力的因素,所以将几个云朵定在某一位置。鼠标拉扯会有云朵被拽下来又弹回去的感觉,我觉得还蛮有意思:)
月亮可以根据鼠标的移动,演绎出“阴晴圆缺”,主要运用了constrain这个函数
constrain函数把mouseX限制在102-540,根据两个圆在空间上起始位置不同以及其移动,就回有月亮阴晴圆缺的效果。
之后我增加了星星的粒子系统,点击空格键时,鼠标所放置位置就朝各个方向冒出许多星星:
粒子系统在代码本色第四章中,作者也给了十分详尽的解答。典型的粒子系统中都有一个发射器,发射器是粒子的源头,它控制粒子的初始属性, 包括位置、速度等。发射器发射的粒子可能是一股粒子,也可能是连续的粒子流,或是同时包含这两种发射方式。
lifespan表示了粒子的生存周期,为了便与实现,我们一般从255开始递减,生存期的范围一般是255~0。
在我的动画系统中,我还增加了第二个粒子系统:它可以通过彼此之间的吸引和排斥进行有趣的动画:
鼠标点击产生新粒子,按p可以让所有粒子弹开,按r可以使所有粒子消失
左上角是该粒子系统的重力以及摩擦力,右下角记录粒子数目。
除此之外我还加了一个小火箭,它可以根据鼠标点击不停变换方向
粒子系统部分代码
老师最近对高数在代码中的运用给我们讲了很多,通过自己的理解以及阅读各种材料,学习到了很多知识,也不禁感叹高数、物理的奇妙。
做完作业之后,总结了一下,发现自己重复使用的代码有些多,不够简洁,希望自己将来有机会可以做出更成熟的作品。
引用
(1)The Nature of Code: Simulating
Natural Systems with Processing by Daniel Shiffman. 2012 . 周晗彬 译.
(2)creative coding
https://www.openprocessing.org/?tdsourcetag=s_pcqq_aiomsg
(3)p5官网
https://p5js.org/
(4)粒子系统的应用
https://dev.gameres.com/program/visual/effects/lizi/