wan 发表于 2020-10-26 15:21:09

fx-92+ Spéciale Collège 实现Y轴“自动缩放”绘图

前言

卡西欧classwiz系列计算器的法国版fx-92+ Spéciale Collège引入了脚本绘图功能,可以在192*47的点阵区域绘制图形。在法国卡西欧计算器网站Planète Casio上引发讨论,并实现了对函数图形的绘制(参见:测试新款 FX-92+ Spéciale Collège,法语)。
但是在实际操作中,要能够很好的观察函数图形的全貌,需要预估函数值域,在脚本中仔细调整y轴绘制范围。否则,可能出现函数值域太大或太小,显示效果不佳的问题。能不能让机器根据函数值域的范围自动实现y轴方向的缩放呢?答案是可以的。经过笔者的探索,实现了这一功能。

基本原理

首先将函数在x轴各像素处的值计算一遍,将最大值和最小值存入变量,然后根据最大值和最小值计算缩放比例和x轴,y轴的位置。
假设函数在绘图范围的最大值为D,最小值为C,如果要观察函数的全貌,需要将这两个值显示在绘图区最上方(y=23)和最下方(y=-23)。设函数值为f,对应在屏幕上的纵坐标为y,则有:

https://www.zhihu.com/equation?tex=%5Cfrac%7Bf-C%7D%7BD-C%7D%3D%5Cfrac%7By%2B23%7D%7B45%7D ,即 https://www.zhihu.com/equation?tex=y%3D%5Cfrac%7B45%5Ctimes%28f-C%29%7D%7BD-C%7D-23
将 https://www.zhihu.com/equation?tex=f%3D0 带入上式可以得到x轴在屏幕上的纵坐标为:
https://www.zhihu.com/equation?tex=y_%7B0%7D%3D%5Cfrac%7B-45%5Ctimes+C%7D%7BD-C%7D-23
假设待绘制函数定义域下限为A,上限为B,则相应的y轴在屏幕上的横坐标为:
https://www.zhihu.com/equation?tex=x_%7B0%7D%3D95-%5Cfrac%7B191%5Ctimes+B%7D%7BB-A%7D

因为自动缩放后x轴和y轴都可能偏移,所以需要将绘图背景设置为空,不显示x轴和y轴。x轴和y轴单另绘制。

脚本代码

运行脚本后会提示输入函数绘图下限A和上限B,输入的上下限不需要关于y轴对称。运行后先处理数据,同时箭头从左向右移动表示数据处理进度。数据处理完毕开始绘图,绘制完毕后在结果区域显示绘制范围内函数的最小值和最大值。
本脚本以e^(x)为例。如果需要绘制其它函数,将脚本中的e^替换为其它函数即可(共四处)。
脚本中的循环体结束符号用“↑”表示。

用到的变量有:
A 定义域下限
B 定义域上限
C 值域下限
D 值域上限
E 步长
F 临时变量
M 临时变量

?→A
?→B
e^(A)→C
C→D
(B-A)/191→E
A→M
Aller à x=-95;y=0
Repeat 191
e^(A+E)→F
Si Alors F<C
F→C
Fin
Si Alors F>D
F→D
Fin
A+E→A
Aller à x=x+1;y=0


Aller à x=-95;y=-C*45/(D-C)-23
Stylo écrit
Aller à x=96;y=y
Stylo relevé
Aller à x=95-B*191/(B-M);y=-23
Stylo écrit
Aller à x=x;y=23
Stylo relevé

Aller à x=-95;y=(e^(M)-C)*45/(D-C)-23
Stylo écrit
Style Croix
Repeat 191
Aller à x=x+1;y=(e^(M+(x+95)*E)-C)*45/(D-C)-23

Afficher result C
Afficher result D


实际效果


绘制x范围为[-90,270]的sin(x),横线为x轴,竖线为y轴,结果区显示的是最小值-1:
https://pic3.zhimg.com/80/v2-394e9d1f1c9109cf76849b2066608792_720w.jpg

绘制x范围为[-1.5,1]的e^(x),x轴在绘图区外不显示,竖线为y轴,结果区显示的是最大值:
https://pic3.zhimg.com/80/v2-9e8fe3952bb107270c18737eb6e5b50e_720w.jpg


程序还可以进一步优化,比如画出x轴和y轴的箭头,坐标轴画上刻度等。


页: [1]
查看完整版本: fx-92+ Spéciale Collège 实现Y轴“自动缩放”绘图