带孩子玩Scratch编程:学龄前趣味程序(10)

上一篇

(10) 笛卡尔心形线

Scratch小游戏笛卡尔心形线

程序目标描述

有一个流传很广的传奇故事,说法国数学家笛卡尔(Rene Descartes)曾被瑞典的一个国王聘请,做国王女儿克里斯蒂娜公主的家庭教师。他们每天讨论数学和哲学问题,时间一长,公主爱上了这位智慧的老师。国王发现后,十分恼火,把笛卡尔赶出了王宫,并不允许他和克里斯蒂娜再接触。为了表示爱意,笛卡尔把代表爱情的桃心,抽象成了数学公式 ρ=a(1-cosθ),对国王谎称是练习题,转交给公主。公主利用笛卡尔教给她的极坐标知识,画出了图形,这就是著名的笛卡尔心形线。

我们这集的程序,就是用计算机帮助公主绘图,把数学公式转化成坐标格纸上的图形。

牢骚的话

笔者小时候读过的各类《趣味程序xx例》,大多数在很靠前的时候就会介绍用程序绘图的例子。而我们这个系列,拖到了第 10 个例程,才开始使用“画笔”功能。这倒并不是笔者忘了这个题材,而是 Scratch 本身就是一种基于图形元素的编程语言,在大多数情况下,如果希望展现图形效果,并不需要动用“画笔”去绘制,而是直接操作“角色”的动作、外观、造型等等。“画笔”反倒是一种效果很不容易出彩的笨办法,往往代码量还很长。

这跟笔者小时候完全不同了,在那个 PC 刚出现的时代,电脑的图形功能并不强大,BASIC 语言、LOGO 语言提供的绘制直线、矩形、圆形的命令,让人们感到十分新奇,所以当然可以算作趣味程序。

而要用 Scratch 的“画笔”功能,写一个 20块积木以内的、有一定视觉效果的程序,着实费了些脑筋。只画一个三角、椭圆、五角星,感觉没什么意思,也没有故事可讲,复杂的图形又很难在 20块积木以内实现。这样,最终选择了笛卡尔心形线作为“画笔”的例程 。另有几个想法,如“卢瑟福α粒子散射轨迹”、“绘制欧盟标志”等,也能在 20块积木以内完成,但故事性略差,因此留到以后再说。

素材准备

笛卡尔头像(来自百度百科):

Scratch小游戏笛卡尔

场景布置

舞台背景选择 Scratch 内置的“Xy-grid”,它是一张坐标格纸,对于这种科学作图程序来说很有用,能让你看到曲线轨迹的坐标数值。

除了添加 Descartes 角色以外,还要添加一个画笔角色,选择 Scratch 内置的“pencil”。然后,在 “pencil”角色的造型编辑活页卡中,按键盘 Ctrl+A 全选图形,并将笔尖移动到编辑窗口的中心标记处(这是为了在运行时让笔迹看起来是笔尖留下的),如下图所示:

Scratch小游戏笛卡尔心形线第1步

回到代码活页卡,两个角色的初始位置随意摆放,将“pencil”角色缩小到合适大小(例如 30)。

代码搭建

在左侧积木分组栏下方,点“添加扩展”按钮,选择“画笔”扩展。之后,先搭建 Descartes 的代码:

Scratch小游戏笛卡尔心形线第2步

这里“cos(…)”积木在“运算”积木箱里,是由“绝对值(…)”积木修改而来的。这个积木叫做“数学函数积木”,它提供了一系列有用的数学函数,可供编程中使用。cos 是一种三角函数,叫“余弦函数”。它具体的含义要到中学才能明白。

注意有 cos 函数这一行: (100) * (1 – cos(方向)),恰恰是笛卡尔心形线公式右侧 a (1- cosθ) 的具体化实例。这里,我们用 (100) 赋值给了公式里的 a,用 (方向) 替换了公式里的 θ。

之后,编辑 pencil 角色的代码:

Scratch小游戏笛卡尔心形线第3步

运行

上述代码运行后,呈现开篇图中的效果。

这个程序还可以绘制其他极坐标方程,小朋友们可以尝试更多:

我们先把 Descartes 代码中的“移到 x:(0)y:(100)” 改为 “移到 x:(0)y:(0)”,让作图中心回到坐标格纸的原点 (0, 0)。

然后在 “移动(…)步” 积木内分别尝试以下公式:

圆:(100) *  (cos  (方向) )

4瓣花:(100) * (cos ( (2) * (方向) ) )

3瓣花:(100) * (cos ( (3) * (方向) ) )

8瓣花:(100) * (cos ( (4) * (方向) ) )

… 可以找找花瓣数量和“(方向)前面的系数之间有什么规律。

双翼异形曲线:(方向) *  (sin  (方向) )

海螺壳:( (方向) + (180) ) / (3)

也可以胡编乱造一些公式,让计算机绘制,看看有什么效果。

讲解

本集程序虽然只有 20块积木,拼起来不难,但可理解性是比较差的。实际上,我们是为了刻意缩短程序长度,牺牲了逻辑的清晰性。不过,鉴于函数、极坐标的概念也不是学龄前小朋友能够理解的,这里就压根不打算讲明白为什么本程序能画出心形线和其他图形了。

唯一值得对小朋友提及的,就是“画笔”积木箱中几块积木的作用。“全部擦除”、“将笔的颜色设为(…)”积木顾名思义,无须多讲。“落笔”、“抬笔”是配合角色的运动,实现留下运动轨迹的功能。在“落笔”之后的运动,所经之处都会留下笔迹,直到“抬笔”为止。

发表评论

邮箱地址不会被公开。