图形计算器:如何找到适当的图形部分显示

3
我正在开发一款绘图计算器(你知道的,就是输入一个公式,比如x²,然后得到该函数的图形)。我遇到的问题是如何偏移和缩放图形视图,以显示函数的有趣部分。
我已经尝试了所有我能想到的“简单”方法。以下是一些示例: - sin(x) => 有趣的部分位于 y = [-1,1]之间,偏移为 (0,0) - x^2 => 有趣的部分位于 y = [0,100]之间,偏移为 (0,0)。(100是任意选择的) - 100x^2 - 10000 => y = [-10000, 100*],偏移为 (-10000,0)
我认为我可以为每种类型的函数指定一个“范围”和“偏移量”,并创建一些数学公式,以相同方式添加/乘法等这些范围,就像计算结果一样。然而,这需要“创造”一些数学公式,潜在的隐含逻辑漏洞太多了。
肯定有一种不太困难的方法来解决这个问题,但我就是找不到。有没有一些特定的术语可以搜索?有没有指针指向一个算法?

1
我认为没有“简单”的方法。识别“有趣的区域”需要检测不连续性、导数和函数零点、渐近线等。 - Dr. belisarius
3个回答

3
这是一个有趣的问题。我从未考虑过这个问题,但我会从以下几点入手:
  1. 找到最靠近原点的方程两个根(可以使用牛顿-拉弗森算法)。
  2. 找到函数的极大值和极小值。为此,您需要找到导数为0的地方。您可以进行数值微分,粗略地找到导数穿过0的地方,或者如果您感到雄心壮志,可以使用自动微分。一旦找到导数的0交点,请返回并在这些点处计算原始方程。
  3. 每个x轴点的函数值。
然后取每个轴上距离最远的点,将它们加上10%,并将其用作边界框坐标。

有一些明显的边缘情况:函数可能没有、一个或无限多个根。该函数可能没有最大值或最小值。我不太确定如何检测这些情况,但您可能希望在步骤(1)和(2)中建立限制,例如找到前N个根或前N个极值,从0开始计数。另一个限制可能是确保您在一个轴上的行程永远不超过另一个轴上的行程的N倍。


1

大多数常见图的两个有趣要点是坐标系的原点(用于定位)和函数的y截距,很容易计算。因此,我会选择这样一个比例尺,使得原点(0,0)和y截距(0,y0)都可见,再加上一些填充,即区间[-y0 - y0/5; y0 + y0/5]。如果原点和y截距接近甚至相同,则我会选择可见区间[-5; 5]。

这背后的理念是,一个良好构造的函数应该在原点附近或至少在y截距附近有其有趣部分。如果没有这样的部分,你就无法知道用户想要看什么,所以他应该自己处理。


0

有趣区域的可能定义之一是以下点的密度:

  1. f(x)=0(与x轴相交)
  2. f'(x)=0(极值点)
  3. f''(x)=0(曲率方向变化点)
  4. f'''(x)=0(最大曲率点,可能最小曲率点不太有趣)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接