最新消息:

Scratch编程之图形特效(9)星夜

Scratch 少儿编程 3166浏览 0评论
Scratch图形特效

友情提示:视频教程观看时请手动设置清晰度。

曾经有一幅画,非常有名,他是是荷兰后印象派画家文森特·梵高于1889年在法国圣雷米的一家精神病院里创作的一幅著名油画,是梵高的代表作之一。

 

他的名字叫《星夜》,也就是星夜月。

 

Scratch编程之图形特效(9)星夜

 

这幅画非常抽象,在小说三体里,倒是描述了太阳系被二向箔毁灭时的场景,就是星夜。

 

如今的都市,很难看见如此的星空了。

 

然而,当我们在星夜里仰望天空的时候,我们会想到什么呢?

是宇宙的浩瀚,还是人类的渺小。

 

有人告诉MrCode,说这个世界很大,很大,没有边际。

 

然而,MrCode想告诉大家的是,这个世界无论有多大,他都只在于你的眼里。

 

今天,我们画一个MrCode心中的星夜。

 

MrCode没有梵高大师的想象力和艺术创作水平。

但是MrCode有Scratch,可以编程啊。

 

所以一个星夜,还不是几行代码的事情。

 

当然,浩瀚的星空,那是几行代码可以搞定的。

只是,我们可以想象星空是怎样的。

 

例如,星星看起来发光,而且星星会旋转。

他们旋转的方向都是有轨迹的。

 

 

Scratch编程之图形特效(9)星夜

 

为了显示出星空的浩瀚,所以,我们仅仅画出循环的圈是不够的。

因为星系之间,也有非常多的交互。

所以,会形成一个非封闭的循环。

 

于是为了显示出星空的动态。

要根据时间,从星系的中心开始分散,星星会随着时间增加,越来越多。

 

我们可以先放置一张有星空背景的图片。

Scratch编程之图形特效(9)星夜

 

那么,可以以该中心点为起始点。

 

这里,我们采用一个函数公式来计算点显示的坐标。

 

迭代函数系统(IFS)。

 IFS是分形的重要分支。它是分形图像处理中最富生命力而且最具有广阔应用前景的领域之一。这一工作最早可以追溯到Hutchinson于1981年对自相似集的研究。美国科学家M.F.Barnsley于1985年发展了这一分形构型系统,并命名为迭代函数系统(Iterated Function System,IFS),后来又由Stephen Demko等人将其公式化,并引入到图像合成领域中。IFS将待生成的图像看做是由许多与整体相似的(自相似)或经过一定变换与整体相似的(自仿射)小块拼贴而成。
算法:
1.设定一个起始点(x0,y0)及总的迭代步数。
2.以概率P选取仿射变换W,形式为
     X1=a*x0 + b*y0 + e
     Y1=c*x0 + d*y0 + f

     X1=(a * x0*cosf(c/180)) – (b * y0*sinf(d/180)) + e
     Y1=(a * x0*sinf(c/180)) + (b * y0*cosf(d/180)) + f
3.以W作用点(x0,y0),得到新坐标(x1,y1)。
4.令x0=x1,y0=y1。
5.在屏幕上打出(x0,y0)。
6.重返第2步,进行下一次迭代,直到迭代次数大于总步数为止。

 

 

我们计算出旋转的坐标系,不需要特别的精细,可以是:

f1(0.8x – 0.4y +2; 0.2x + 0.9y+2) p1=1/3
f2(-0.3x + 0.7y – 7; -0.2x + 0.·y +·.5) p2=1/3
f3(0.2x -0.1y+7; 0.1x + 0.2y -1.5) p3=1/3

 

~~~~~~~~~~~~~~~~~~~~~~~~

 

形成代码如下:

 

 

Scratch编程之图形特效(9)星夜

其中,functions是我们定义的链表。

function是变量,以获取链表的值。

 

最终显示效果为:

Scratch编程之图形特效(9)星夜

由于代码执行迭代,所以脚本偏慢,可以采用加速模式显示。

 

效果如下:

Scratch编程之图形特效(9)星夜

再配上克莱德曼的《星空》

 

是不是很有点赶脚。(点击阅读原文进入)

 

喜欢这份代码,快去卡搭收下吧:

定时有流星许愿哦!

 

始发于微信公众号:
顽斗坊

您必须 登录 才能发表评论!