数与图(13)——画双曲线

在上一篇《数与图(12)——画椭圆》中,我们绘制了8个椭圆(其中一个是圆),并标注了8个椭圆的焦点,因为设定了b≤a,因此焦点在x轴上。从测试结果中观察到,当a不变时,b的减小导致焦点远离原点,且随着b远离a,焦点远离原点的速度变慢。

本篇文章将继续讨论绘制函数图形的话题,这次轮到了双曲线,它的标准方程为

本文只讨论焦点在x轴的情况。与椭圆类似的,双曲线也有焦点,焦点到原点的距离为c,且

由方程⑴可以推导出双曲线函数的表达式

以上的⑶和⑷就是我们编写程序需要的公式。

本文的目标与“画椭圆”相似,假设a不变(a=4),让b从20变到2,变化幅度为2,针对每一组a、b值,绘制一对双曲线,并在x轴上标注焦点的位置。

一、修改用户界面

打开“画椭圆”项目,将项目另存为“画双曲线”,并修改Screen1的标题为“画双曲线”。将原来的椭圆方程截图替换为双曲线方程截图,在画椭圆按钮右侧添加一个按钮,命名为“双曲线按钮”,设其显示文本为“双曲线”(省去一个“画”字以便按钮的宽度一致)。修改后的用户界面如图1所示。

图1 修改后的用户界面

二、编写程序

1、创建有返回值过程

(1)双曲线函数

该过程对于给定的参数a、b、x及“y大于0”,返回函数值y,注意这里的y是数学坐标系中的y,在稍后绘图时,需要转换为画布坐标系中的坐标。代码如图2所示。

图2 有返回值过程——双曲线函数

(2)双曲线焦点坐标c

该过程对于给定的参数a、b,返回双曲线焦点的坐标c(c>0),c为数学坐标系中的值,在绘图时需要转换为画布坐标系中的值,代码如图3所示。

图3 有返回值过程——双曲线焦点坐标c

2、新建、修改无返回值过程

(1)新建过程——求双曲线坐标列表

该过程从“求椭圆坐标列表”复制而来,添加了一个参数“左分支”,该参数为逻辑值。与椭圆不同的是,双曲线包含两条曲线,对于方程⑴而言,两条曲线中一个开口向左,称为“左分支”,另一个开口向右,称为“右分支”。这两个分支需要单独绘制,因此,绘图坐标列表也必须是独立的列表。当参数“左分支”为真时,过程返回左分支的坐标列表,否则,返回右分支的坐标列表。具体代码如图4所示。

图4  无返回值过程——求双曲线坐标列表

还有一点需要特别提起注意的是,在绘制左分支时,循环变量是从小到大变化,其增量为正值,这样,y1列表从负的最大值绘制到左顶点(曲线与x轴的交点),而经过逆序排列的y2列表可以确保曲线从左顶点绘制到负的最大值,这样的绘图数据保证了绘图的连续性。然后在绘制右分支时,情况就不同了,如果循环变量仍然从小到大变化,那么绘图从右顶点开始向上绘制到最大值,然后,曲线会突然跳到第四象限,也就是与x最大值对应的负的y值,并绘制一条垂直于x轴的直线,这不是我们希望看到的结果。为此,当求右分支的坐标列表时,循环变量必须从大到小变化,即,其增量为负值。有兴趣的读者不妨试试看。

(2)修改过程——绘制焦点

为了利用原来绘制椭圆焦点的过程,这里需要为该过程添加一个参数“画椭圆”,该参数为逻辑值,当其值为真时,绘制椭圆焦点,否则,绘制双曲线焦点。代码如图5所示。

图5 修改绘制焦点过程

(3)新建过程——画双曲线

该过程是从画椭圆按钮的点击事件处理程序中复制而来,参数“左分支”为逻辑值,当其值为真时,绘制左分支,否则绘制右分支。代码如图6所示。

图6 新建过程——画双曲线

3、事件处理程序

在双曲线按钮的点击事件中,依次调用“画双曲线”过程,完成左右两侧曲线的绘制。在开始测试之前,要将全局变量a的值修改为4,即,我们要绘制的双曲线其顶点坐标为(-4,0)及(4,0)。代码如图7所示。

图7 双曲线按钮的点击事件处理程序

三、测试

连接AI伴侣进行测试,结果如图8所示。

图8 测试结果

图8中有八对双曲线,从曲线及焦点的颜色上可以看出,随着b的绝对值的增大,曲线开口增大,同时焦点逐渐远离原点。有趣的是,变化的焦点之间似乎是等距的,也就是说,焦点远离原点的速度似乎是不变的,这与椭圆焦点的变化特点有所不同。

最后不要忘记修改画椭圆按钮的点击程序,为绘制焦点过程新增参数赋逻辑值“真”,代码如图9所示。

图9 修改画椭圆按钮的点击程序

四、讨论

椭圆和双曲线是高中数学中难度相对较大的内容,围绕它们可以展开的内容还有很多,如椭圆的离心率、面积,双曲线的虚轴、渐近线等等,如果再向物理领域延伸,这两者又与行星、彗星的运行轨道有关。基于这些知识,借助于程序这个工具,我们可以充分展开自己的想象力,去模拟那些现实世界中无法实现的实验。

(0)

相关推荐