数与图(21)——三角函数
在此前的《数与图》系列文章中,我们讨论最多的是由幂函数组成的多项式函数,包括函数的图像、求导数、求积分,甚至还利用二次函数完成了一个机器学习的案例。除此之外,我们还讨论了圆、椭圆及双曲线函数,并绘制了相应的图像。本文即将讨论的三角函数,与之前的各种函数最大的不同是,三角函数具有周期性。本文的目标是绘制正弦、余弦及正切函数的曲线,并讨论周期、振幅等概念。
三角函数的定义源自三角形,它体现了直角三角形中角与边之间的关系,如图1所示。
图1 三角函数的定义
想象图1中的斜边c从零度角开始逆时针旋转,当θ=0度时,a=0,b=c,因此sinθ=0,cosθ=1;随着θ增加,a逐渐增加,b逐渐减小,当θ=90度时,a=c,b=0,因此sinθ=1,cosθ=0;随着角度的继续增大,当θ=180度时,a=0,b=-c,因此sinθ=0,cosθ=-1;当θ=270度时,a=-c,b=0,因此sinθ=-1,cosθ=0;当θ旋转到360度时,斜边c重新回到0度,如此周而复始地旋转,角度不断增加,而sinθ和cosθ的值永远在-1到+1之间循环,这就是函数周期性的来历。对于sinθ及cosθ来说,它们的周期就是360度,而tanθ的周期则是180度。
角θ的度量可以用角度,也可以用弧度,角度与弧度之间的换算关系是
标准的正弦函数写作
其中A称为振幅,它决定了函数的最大值/最小值;ω称为角频率,它决定函数的周期,当ω=1时,函数的周期为2π(360°),当ω=2时,函数的周期为π(180°)。φ称为初相位,它决定函数图像在x轴上的平移量。
在App Inventor的内置块分组中,数学代码块里包含了正弦、余弦及正切块,它们接受的数值单位为角度,我们将分别使用这些块来计算函数值,并绘制函数图像。
一、正弦函数
为了绘制函数图像,需要确定自变量x及函数值y的取值范围。由于正弦、余弦函数的周期为360度,为了能够绘制两个周期的图像,x轴的最小值设为-400,最大值设为400;y值则取-4到4。将《数与图(20)》中的项目另存为“三角函数”,并重新设置绘图数据。重新命名项目中的按钮,并重新设置其显示文本属性。在屏幕下方添加两个水平布局组件,再分别向两个水平布局中添加三个标签、三个文本输入框(仅限数字),相关设置如图2所示。
图2 修改用户界面
下面开始编写程序。
1、声明全局变量
声明两个全局变量——颜色列表及颜色索引值,代码如图3所示。
图3 声明全局变量
2、创建过程
创建一个过程——求正余弦函数坐标列表,代码如图4所示。
图4 创建过程——求正余弦函数坐标列表
3、编写事件处理程序
编写正弦按钮的点击事件处理程序,代码如图5所示。
图5 正弦及余弦按钮的点击事件处理程序
4、测试
依次修改振幅、角频率及初相位,然后点击绘制正弦曲线,观察曲线的变化。测试结果如图6所示。
图6 程序的测试结果
图6中共有7条曲线,按照赤橙黄绿青蓝紫的顺序,它们依次表示下列函数
读者可以也可以自行测试,观察振幅、角频率及初相位对函数曲线的影响。
二、余弦函数
这里只需要编写余弦按钮的点击事件处理程序,其实它与正弦按钮的程序几乎完全相同,只差一个参数——余弦。此时应该创建一个过程,来避免代码的复制粘贴,最终的代码如图7所示。
图7 创建并调用过程——绘制正余弦曲线
测试结果如图8所示。
图8 绘制余弦曲线的结果
这次绘制了6条曲线,其中红色曲线的函数为y=cosx,蓝色曲线的函数为y=4cos(x-90),其他曲线请读者给出它们的函数表达式。
三、正切函数
与正弦、余弦函数不同的是,函数y=tanx的周期为180°,而且当x趋近于±90°时,函数值趋近于无穷大:当x从±90°的左侧趋近时,tanx趋近于正无穷,当x从±90°的右侧趋近时,tanx的值趋近于负无穷。基于上述特点,无法连续绘制各个周期中tanx的图像,因此需要单独绘制每个周期中的图像。
创建一个有返回值过程——y不出界,再创建一个无返回值过程——求正切函数坐标列表,代码如图9所示。
图9 创建两个过程
然后编写正切按钮的点击事件处理程序,代码如图10所示。
图10 正切按钮的点击事件处理程序
在测试之前,需要修改用户界面上的绘图参数,将y的最大值改为10,最小值改为-10,主间距为2,辅间距为0.4,然后进行测试。测试结果如图11所示。
图11绘制正切曲线的测试结果
以上我们用程序绘制了三种三角函数的曲线,其中的正弦、余弦曲线呈现出波的形式,这种简单而优美的曲线,恰好与物理学中的简谐振动相对应,例如钟摆的运动。