友情提示:380元/半年,儿童学编程,就上码丁实验室。
上一篇文章中,我们完成了羽毛中羽轴--鸟之羽裳(点击可观看原文)的绘制。
本次研究羽枝的绘制。
—复习一下上次观察到的结果
1 在羽毛的中心有一根比较粗的管(学名叫羽轴);
2 从这根羽轴上,从两边长出了很多的细小的毛(学名称为羽枝),每个羽枝与总管的角度基本相同;
3 羽枝的形态也不完全相同。在接近根的部分,比较散乱,而上面的部分,则比较规整;
4 在顶端部分,羽枝的长度会减少,最后在顶端产生一个比较圆滑的曲线。
绘制羽枝
需要的是在绘制羽轴的循环中,向左右两侧绘制出羽轴,即在原来的循环中增加功能。
由于绘制的语句可能会比较长,所以使用自定义积木来绘制。
下面我们制作一个自定义积木。可以从指定的位置和方向绘制一根分枝。
这个积木会从当前的位置,增加一个角度后,绘制一个指定长度的线。
我们先设计一下自定义积木的接口。
其中的四个参数分别表示了位置,当前角度,转动角度和绘制长度。
绘制时在循环中直接将角色的位置和角度传过去就可以了。
绘制另一侧的羽枝时也很简单
这就是自定义积木的好处,用好了,会使程序灵活而且易于修改。
程序中步骤:
1抬笔
2移动到pX,pY,面向pA+pAChange
3落笔,将粗细设置为1
4移动PLEN步长。
5抬笔
6回到PX,PY位置,重新面向PA方向。保证退出时回到原来的位置上
程序如下:
能够得到如下的结果。
当然主循环中也进行了小的调整。
大家可以对比一下之前的程序,并想一想,如果改变了语句的次序,会得到什么样的结果。
观察现在的效果,还应该考虑到以下几点问题。
1 如何调节羽枝的疏密程度;
2 所有位置上都是整齐分布的,如何让根部杂乱一些呢?
3 如何调节项端的长度,让项端圆滑呢?
关于第1个问题。大家应该能够很容易想出来,现在的循环是100次,所以在两边各绘制了100个羽枝。如果想绘制更多的枝,只需要改变循环次数,并适当修改每次的移动长度。
但是等等,只这样做就对了吗?
想想之前我们用这个100还做了什么,还用于调节羽轴的粗细。所以如果修改了循环次数,那么每次改变的粗细变量也需要对应修改。
大家可以自己实验一下如何调节,再想一想是否有更好的解决办法。
杂乱羽枝的绘制
为了绘制不同的羽枝,可以建立另一个自定义的积木。积木的参数与原来的绘制直线的是一样的。
那么如何绘制杂乱的羽毛呢?可以使用随机转动的方式,将绘制羽枝的过程分成很多的小段,每画一段再随机转动一下。
将主程序中的原来的积木换为这个积木,就能够得到如下的结果。可以看到,每个羽枝都在绘制的过程中不断随机转动,就形成了杂乱的效果。而且每次产生的都是不一样的。
如果想调节变化的程度,可以修改积木中的角度变化范围及移动的步数。角度范围大一些就更加杂乱一些。
那么如何分段显示不同的效果呢?还是需要一个变量进行处理。
我们设置一个变量I。在I小于某个值时,绘制杂乱的羽枝,在I大于某个值时,绘制规整的羽枝。
就能够在不同的段绘出不同的效果了
最后一件事,需要对项端的长度进行处理
最简单的就是在I大于某值后使用线性插值了。
可以得到如下的结果,但不是很圆滑。
可以用一点数学的方法,调节这个曲线。在这里使用了3次方方程。
是不是就平滑了很多呢?
如果适当调节各处的参数,就能得到更加真实的效果。
总结
1 使用Scratch去绘制羽毛,本次介绍了中间羽枝的绘制过程。
2 在绘制的过程中,使用了自定义积木,简化了开发的过程。
3 程序增加功能后,会逐渐变得复杂,所以这时就需要考虑每部分程序修改后给其它部分程序带来的问题。所以软件的复杂度并不是随模块数量的增加而线性增加的,常常是以指数级数增加的。
4 完成一个计算机项目,需要计算机、数学、特定学科(我们这里可以算是生物学)的结合。