在本文中,我们将完成一个“正弦曲线与圆周运动关系原理”的数学原理演示动画。
正弦曲线或正弦波(Sinusoid/Sine wave)是一种来自数学三角函数中的正弦比例的曲线。
正弦曲线的形状就像完美的海上波浪般,以三角函数正弦比例改变而形成。
**的纯正弦函数公式为:
y=sin(x)
而一般应用的正弦曲线公式为:
y=Asin(ωt+θ)
其中,sin为正弦符号,A为波幅(纵轴),ω为角**,t为时间(横轴),θ为相偏移(横轴左右)。
—— wikipedia
好了,初中数学知识复习就到这里。
下面我们开始这次的编程内容吧。数学书在讲解正弦曲线的含义时提到,“正弦波是一个圆周运动在直线上的投影”,这个定义并不容易理解,不如我们编写一个程序,动态的演示这个**,帮助初中生们理解吧~
00 软件**
需求说明:
编写一个动画程序,有一个点在匀速的围绕圆运动,有另外一个点在x轴上匀速运动、同时在y轴上与前一个点的高度一致。最好留下这两个点的运动轨迹。
由以上内容描述,我们可以将需求人为拆分成两部分,第一步,画一个圆;第二步,画正弦波。这就用到了《Scratch视频课程1|什么是少儿编程、为什么要学、学什么?》中第7部分提到的“计算思维”中的“分解”:将一个复杂问题拆分成几个更小、更容易处理的问题。(计算思维4要素是:分解、**识别、抽象、算法**)
现在我们再根据这个思路继续进行设计。
软件设计:
第一个角色“半径”,动画**中围绕圆点匀速旋转。画圆的动画放在舞台左侧;第二个角色“端点”,即,圆周上的点,随着半径的**在圆周上**;第三个角色“正弦波上的点”,我们就简称它“正弦波”吧,它在每一次动画中在x坐标上都**2π,而y坐标和“端点”的y坐标一致。画正弦波的动画放在舞台右侧;第二和第三个角色在每一次动画中匀速**n次,我们将这个**定义成变量,取名“采样**”,预设值100。01 更换舞台背景
因为我们要做的是数学原理动画,并且涉及到坐标系,所以我们将舞台背景改成如下图片。
02 添加角色
按照上面的**,添加半径、端点和正弦波,这三个角色都需要我们手工绘制。
1、如图点击添加角色图标,选中【绘制】,添加三个角色,并分别改名为:半径、端点、正弦波。
2、删除不需要的默认“角色1”小黄猫。
03 绘制角色
绘制“半径”
找到角色中心点,把它当做圆心,从它开始往正右侧画直线。直线长度应该适中,因为要确保使用它画的圆不要超过舞台左侧区域,同时,又要确保画的圆也不能太小,免得不容易查看。建议先画长一点,当编码调试发现超长的时候,用橡皮擦一点点擦除进行**。
绘制“端点”
找到角色中心点,点一个黑点,也可以是画一个极小的实心圆。
绘制“正弦波”
操作步骤同绘制“端点”,颜色可以相同,也可以不同。
04 创建变量
画圆和正弦波的动画看似是连续、**的动画,但是,其实仍然是一步一步的小动画组成的,只是这些小动画被分割的越小,停顿时间极短,所以给人的视觉感觉是连贯的。(我们以前的文章已经介绍过动画成像的原理《【Scratch工具介绍】扩展知识:画面是怎么“动”起来的?》,这里不再赘述)
既然“动画是一段一段的”,我们可以定义2个变量来表述这个含义:一个控制一次动画的时长,一个控制被分成多少段。
注意,这两个变量是几个角色公用的,所以创建时请选择“适用于所有角色”。
也许还需要其他的变量,等到编程遇到的时候再说吧。
05 左侧圆周的编码
将“半径”的圆点放在靠近左侧中心的位置,即尽量圆点放在坐标(-120, 0)处。
“半径”围绕圆点旋转,每次旋转角度(360/取样**),重复旋转(取样**)次,二者相乘**圆周360度,即,“半径”的外侧点运动轨迹就是一个圆。
代码不多,咱们重点看两个地方:
1、发送【广播】,它的作用是通知角色“端点”**,实现了“端点”和“半径”**同步。关于【广播】可以查阅《Scratch编程 | 事件积木》。下面是创建广播的**,
2、每次**之间等待一段时间,否则程序运行太快根本无法看到动画**。等待时间是(动画时长/采样**)。
06 圆周端点的编码
想实时**“半径”的外侧点坐标不是易事,所以,我才想着**一个“端点”角色,让“端点”跟随“半径”运动,以便于我们**圆周上点的坐标。
讲解一下部分代码:
1、**(80)步,这里的(80)是“半径”的长度,是从坐标系中读出来的,每个人画的不同,所以,这个值应该也是不同的。
2、“端点”是怎么做圆周运动的呢?
代码是【当接收到旋转】之后的3个蓝色积木。文字解释乏力,看图吧
3、发送【广播】,它的作用是通知角色“正弦波”**,实现了“正弦波”和“端点”**同步。
07 给右侧正弦波编码
我们先约定正弦波的一个周期,在x轴方向上长度200,即,10秒钟(变量“动画时长”)内在x轴**100次(变量“取样**”)累计长度200,这样x轴上的逻辑就出来了。
再看在y轴方向上,角色“正弦波”的y坐标和“端点”角色的y坐标始终一致。
试运行程序,点击舞台左上角的小旗子。
圆周运动和正弦波**都能清晰的演示了,如果能够留下它们的轨迹就更好了。
08 留下运动轨迹
现在,我们暂停讲解,请各位读者尝试思考这个问题:
如何在“端点”和“正弦波”运动的时候,留下它们的**痕迹??
思考倒计时……
10
9
8
7
6
5
4
3
2
1
0
答案是,使用“图章”积木。
编码如下:
关于“图章”积木的更多内容,可以查阅历史文章《【Scratch工具介绍】画笔积木》。
09 完工!运行程序
至此,我们完成了“需求说明”中的全部内容。
点击舞台左上角的小旗子运行程序,看看效果吧。
PS:直到完成本文才感觉到这个例子可能有些偏难了,如果你没有看懂……多看几遍吧~~
附加练习思考:为什么绘制“半径”时,要从角色中心点的那个十字星开始画直线?
tag:#Scratch编程、#少儿编程、#儿童编程、#趣味编程、#青少年编程、#软件编程