龙空技术网

3D打印小猫-第11届蓝桥杯Scratch国赛真题第6题

超平的编程课 102

前言:

此时兄弟们对“蓝桥杯历年真题c语言b组”大体比较注意,看官们都想要学习一些“蓝桥杯历年真题c语言b组”的相关文章。那么小编同时在网络上收集了一些有关“蓝桥杯历年真题c语言b组””的相关文章,希望小伙伴们能喜欢,大家一起来学习一下吧!

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第8讲。

第11届蓝桥杯青少年组国赛原定于2020年4月25日举行,因疫情推迟到2020年10月31日,并且改为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

3D打印小猫,本题是第11届蓝桥杯Scratch国赛真题编程第6题,是中级组最后一题,初级组没有此题。题目要求考生使用Scratch编程模拟3D打印技术来打印一只小猫,本题难度系数为5。

本题将编程和当下最时髦的黑科技之一-3D打印相结合,非常具有前瞻性,创意十足,先来看看题目的详细说明吧。

一.题目说明

背景信息:3D打印技术,它与普通打印工作原理基本相同,打印机内装有液体或粉末等“打印材料”,与电脑连接后,通过电脑控制把“打印材料”一层层叠加起来,最终把计算机上的蓝图变成实物。

编程实现:通过滑杆控制小猫造型变化,按下空格键,传感器进行扫描并在小猫右侧打印它的造型。

具体要求

1). 当小绿旗被点击后,角色出现在舞台对应位置;

2). 通过滑杆控制小猫形状变化(外观特效:鱼眼,滑杆范围:-100~100);

3). 按下空格键,小猫左侧出现传感从下到上对小猫进行全身扫描,同时在右侧从下到上依次画出扫描过的部分身体;

4). 当完成扫描后,右侧程序完整造型效果;

5). 点击绿旗,程序可重新开始。

二.作品效果

在编程之前,先来看看作品的效果,如图所示:

视频加载中...

三.思路分析

对于大多数中小学生来说,3D打印技术是一个比较新颖的概念,如果不了解3D打印原理,是很难找到解题思路的。

简单来说,3D打印就是以数字模型为基础,运用可粘合材料,通过逐层打印的方式来构造物体的技术。

3D打印技术有两个关键点:

建立数字模型逐层打印

逐层打印相对比较好理解一点,我们可以将小猫分成若干层,比如150层,每一层又由若干个点构成的。如果能确定小猫的层数,以及每一层中所有点的位置,那么我们就可以使用Scratch画笔来绘制出黑色的小猫造型了。

每一层中各个点的位置,这就构成了数字模型,很显然,本题中并没有直接给出数字模型,而需要我们通过编程建立小猫的数字模型。我们可以模拟使用扫描仪扫描物体的过程,扫描的时候也是逐层进行,每一层都从左至右进行逐点扫描,并记录下有效打印点的位置,这样就可以建立数字模型。

这有点类似于在LED屏幕中显示文字,如图所示:

这是一个 16 x 16 的LED屏幕,点亮不同位置的点,就可以显示不同的文字,生活中的交通信号灯、电子屏都是利用这个原理来实现的。

搞清楚了3D打印过程及原理,我们的思路就变得非常清晰了,那就是先模拟扫描过程,逐行扫描小猫,记录下各个有效打印点的坐标,建立数据模型,与此同时,在小猫的右侧打印出小猫造型。

本题一共使用了4个角色,如图所示:

四.编程实现

根据上面的思路分析,我们可以分3步进行编程:

鱼眼特效模拟扫描过程,建立数据模型逐层打印小猫

1.鱼眼特效

根据题目要求,通过滑杆控制小猫实现鱼眼特效在-100到100之间变化。这个功能比较简单,先建立一个变量,将其命名为”n“,并将其设置为滑杆模式,如图:

当变量变为滑杆模式时,再使用鼠标右键点击变量,会多出一个”改变滑杆范围“选项,如图:

点击”改变滑杆范围“选项,弹出如下窗口,将最小值设为-100,最大值设为100,再点击确定按钮。

接下来就可以编写代码了,切换到小猫角色,编写代码如下:

这样一来,当使用鼠标调整滑杆范围时,小猫就会呈现相应的鱼眼特效,非常有意思。

2. 模拟扫描过程,建立数据模型

根据前面的分析,我们需要建立数据模型,这就需要对小猫进行逐层扫描。在扫描过程中,对点的大小把握显得至关重要,点越小,效果越好,但需要扫描的次数也更多,一般来说,选择1个像素(等于Scratch中的1步)是最合适的。

在Scratch角色库中,没有1个像素大小的角色,该怎么办呢?

解决方案就是绘制一个小圆点作为扫描点角色,先将该角色移到小猫的左下方,并隐藏起来,等待玩家按下空格键,显示角色,并进行逐层扫描,代码如下:

这里使用了两层嵌套循环,外层的循环重复执行了125次,表示将小猫分125层进行逐行扫描,每一层扫描完毕,都回到左边,并向上移动一层,进行下一层的扫描。

内层循环则是自左至右重复执行127次,每移动1步,都需要记录下该点的x,y坐标,分别保存在变量”扫描点x“和”扫描点y“中。在扫描过程中,如果碰到小猫,就说明这个点是有效的打印点,将其x,y坐标保存到变量”打印点x“和”打印点y“中。

这里还发送了两个广播,其中”扫描“广播是发送给角色”扫描仪“的,而”打印“广播则发送给”画笔“角色,用来打印小猫。

切换到”扫描仪“角色,编写代码如下:

代码非常简单,也很容易理解,该角色的作用就是让用户看到扫描仪扫描的过程,但真正完成扫描工作的是”扫描点“角色。

3. 逐层打印小猫

在扫描过程中,我们已经通过变量”打印点x“和”打印点y“记录下有效的打印点坐标,并且发送了”打印“广播。现在,我们只需要在接收到”打印“广播时,完成打印小猫动作即可。

打印需要在一个新的角色中完成,添加一个”画笔“角色,编写代码如下:

需要注意的是,这里的x坐标值为”打印点x + 120“,其作用是在小猫的右侧120步处开始打印小猫,如果没有右移的话,那么打印出来的小猫和原来的小猫会重叠,至于右移多少,可以自己设定,比如100步、150步都可以。

五.总结与思考

本题代码并不复杂,一共50来个积木块,但涉及到的知识点不少,主要包括:

绘制新角色;鱼眼特效的设置;变量的使用,尤其是滑杆变量的使用及滑杆范围设置;嵌套循环的使用;事件广播机制;Scratch画图。

作为压轴题目,从代码的角度来讲,这里没有复杂的逻辑,真正的难点在于对3D打印原理的理解,并通过Scratch编程来模拟这个打印流程。

不知道你发现了没有,编程的学习完全不同于学校文化课的学习。编程学习是以解决实际问题为导向的,它没有固定的标准答案,需要孩子不停的思考(分析问题)、尝试(发现问题)、直到完成任务(解决问题),这个过程其实就是编程所倡导的项目制教学(PBL)。

针对本题,你还可以做进一步探索,尝试完成如下功能:

打印出小猫的倒影;打印出一模一样的彩色小猫。

如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,十分感谢。

标签: #蓝桥杯历年真题c语言b组