给孩子的计算思维书:图形化编程及数学素养课(基础篇)
上QQ阅读APP看书,第一时间看更新

2.3 方向与旋转

不知道大家有没有一点疑惑:为什么上面的移动20步就是向右移动,而不是向左、向上或向下移动呢?或者更复杂一点,为什么不是向左上角、右上角等方向移动呢?

我之前讲过,计算机自己不会主动思考,我们告诉计算机做什么它才会做什么。计算机里的小猫一定是因为我们告诉它向右走它才向右走的。可是,我们的程序里并没有哪条命令告诉它向哪个方向移动啊,这是怎么回事呢?

这个问题的答案涉及运动的方向。与人在现实生活中的运动一样,每个角色也有一个面向的方向,角色移动的时候就是沿着所面向的方向移动的。那么,怎么表示面向的方向呢?现实生活中可以用东、南、西、北、东南、东北、西南、西北来表示大概的方向。但如果要表示更精确的方向,就要使用角度的概念。Scratch就是使用角度来表示方向的。

在Scratch里,将朝上定义为面向0°。在此基础上,角色可以绕着中心点顺时针或逆时针旋转。顺时针旋转时,用正数表示旋转的角度,旋转90°、180°和270°后所面向的方向分别如下图所示。当然,也可以逆时针旋转。逆时针旋转时,用负数表示逆时针旋转的度数。比如逆时针旋转90°,即旋转-90°,等价于顺时针旋转270°。

我们知道,周角是360°,如果旋转的度数超过了360°,那可以通过除以360°取余数得到旋转的角度。比如,角色初始时面向0°方向,顺时针旋转450°后面向什么方向呢?由于450÷360=1…90,因此,角色最后面向90°方向。

那如果角色一开始不是面向0°方向,那又会怎样呢?

小练习

(1)假设角色一开始面向70°方向,经过两次顺时针旋转200°,最终面向什么方向?

解:

70+200×2=470

470÷360=1…110

因此,最后面向110°方向。

(2)假设角色一开始面向70°方向,经过两次逆时针旋转250°,最终面向什么方向?

解:

70-250×2=-430

-430÷360=-2…290(注意:余数一定要大于等于0)

因此,最后面向290°方向,或者是-70°方向。

或者可以这么思考,逆时针旋转250°等价于顺时针旋转360°-250°=110°。70+110×2=290,因此,最后面向290°方向。

现在,我们可以来回答为什么小猫是向右移动的问题了。这是因为,在默认的设置下,小猫所面向的方向是90°(见下图),即右方。如果我们要改变小猫运动的方向,只要改变它面向的方向就行了。