三角函数
如果你还没接触过三角函数,可能会好奇Scratch里的sin,cos,tan是什么意思。
三角函数能讲的东西很多,本教程只介绍其中最简单(也是最实用)的部分。
θ是什么?就跟我们用“A,B,C”这样的大写字母表示顶点、用“a,b,c”这样的小写字母表示边一样,我们会用“α,β,θ”这样的希腊字母表示角度。它只是一个字母而已,与a,b,c没有根本区别
公式有3个,不过长得非常像:
一个不认识的运算(一个角度) = 一条边 / 另一条边
每一个公式都包含了“1个角度+2条边”。也就是说:
只要我们知道直角三角形中(除直角外的任意)一个角,就可以算出任意两条边的长度的比值; 如果我们还知道其中一条边的长度,那么可以直接求出剩下两条边的长度。
案例解析
我们来看一个例子吧:
如图,你站在一根旗杆旁边5m的地方,抬头延76°方向观看,正好能看到旗杆顶端。计算旗杆的高度h (人的身高忽略不计)
这次的直角三角形非常显而易见,相信你已经找出来了:
但是公式有3个,这里应该用哪一个? 这道题的5和h,对应的是公式里的a, b还是c?
- θ = 76° a = h b = 5
为什么?这里我先卖个关子,各位不妨对照公式原图先猜猜。分析方法我会在后面给出。
同时包含a,b,θ的公式只有第三条(tan),那么代入进去吧:
tan(76) = h / 5
tan(76)等于什么?要怎么算?
坏消息是,这东西没法用笔计算;好消息是,我们可以用计算器和计算机。
tan(76) ≈ 4,剩下的就非常简单了:
h = 5 * tan(76)
= 5 * 4
= 20
所以旗杆的高度大约是20m。 我们不用爬到旗杆上,就能测出旗杆的高度。是不是很神奇?
对边、邻边、斜边
回到之前的问题:我是怎么知道“h和5”分别对应“a和b”的? 或者说,我是怎么区分三角形的3条边的。
选择三角形中的其中一个角θ。与θ相邻的两条边叫θ的“邻边”,与θ不相邻的那一条边叫θ的“对边”。
可是“邻边”有两条诶?
我们的公式前面要求过,这必须是一个直角三角形,而且我们选的θ是一个锐角。 也就是说,除了θ外的另外两个角中,肯定有一个直角。
于是,我们给那个直角的对边(同时也是三角形中最长的边)起了另一个名字,叫做“斜边”。
这样一来,只要我们选择了直角三角形的其中一个锐角,就可以用3个不同的名字称呼它的3条边了。
我们的公式就可以写成——
注意: 选择的θ不同,“邻边”和“对边”也会有所不同。只有“最长的边是‘斜边’”是固定不变的选择的θ变了,邻边和对边也变了。但公式仍然成立
刚刚那道题中:
76°就是我们选择的θ;旗杆h与76°不相邻,所以是“对边”;
地面5与76°相邻,但不是直角的对边,所以是“邻边”。
因此使用公式:tan(θ) = 对边 / 邻边
是不是有点晕? 分清楚三角形的三条边,是使用三角函数公式的前提。这些知识得先消化掉我们才能继续,加油吧~
巩固练习
如果你觉得自己理解的差不多了,就来看下一个例题,检验一下学习成果吧——
如图,一个角色在(0, 0)的位置,面向37°方向,移动了100步。计算它移动后的坐标(x, y)sin(37) ≈ 0.6 cos(37) ≈ 0.8 tan(37) ≈ 0.75
建议:先自己思考,再看答案。 你目前掌握的知识已经足够解决这个问题了。
如果你已经思考过了,那么继续吧——
又是熟悉的坐标。 有了之前的经验,各位想必已经知道如何在直角坐标系下构建直角三角形了。
这道题中已知的角是37°,已知的边100是斜边。
x是37°的对边,联系对边与斜边的公式是sin。
sin(37) = x / 100
题目已经给出:sin(37) ≈ 0.6,所以——
x = 100 * sin(37)
= 100 * 0.6
= 60
y是37°的邻边,联系邻边与斜边的公式是cos
cos(37) = y / 100
题目已经给出:cos(37) ≈ 0.8,所以——
y = 100 * cos(37)
= 100 * 0.8
= 80
综上所述,移动后的坐标是(60, 80)。
最终答案跟你算的一样吗?
这道题的方法不唯一。你可以先算x,也可以先算y;算出一条直角边后,另一条可以用tan,也可以用之前学的勾股定理。最终都会得到x=60,y=80。
但如果你算出来的x和y是反的,就需要好好检查一下,是不是把对边和邻边搞反了。
Scratch应用
我们刚刚已经学会了用三角函数计算“向 ( ) 方向移动 ( ) 步”后的坐标。
下面这个Scratch写的移动函数,你应该能够看懂了吧?
既然作用与原版一样,为什么要重新写一遍呢?
知道了底层原理,就可以对它进行各种不同的改造,满足新的需求。比如:
在大地图引擎里,角色的坐标存在变量里。 移动角色需要改变那几个储存了坐标的变量,而不能用原版的 [移动 ( ) 步] 了。
但如果你知道 [移动 ( ) 步] 是如何实现的,只需要把变量一换,就能在大地图里实现相同的效果:
再比如,我希望子弹一边旋转、一边向固定方向飞行:
原版的(方向)要用来做自旋,不能用来控制移动了。
但这难不倒我们。只要稍加修改、把方向也做成参数,就可以自由指定移动方向了。再建一个新的变量(direction)来储存方向,子弹怎么转也不会影响到移动方向。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=simple-math/simple/lec02&type=comment"
title="{小Simple也能看懂的Scratch常用数学知识 02}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>