3

我正在研究一个图形计算器(你知道,一个你输入公式的地方,比如说 x^2,你会得到那个函数的图表)。我遇到的问题是如何偏移和缩放图形视图以显示函数的有趣部分。

我已经用尽了所有“简单”的想法。让我举个例子: - sin(x) => 有趣的部分在 y = [-1,1] 和偏移量 (0,0) 之间 - x^2 => 有趣的部分在 y = [0, 100] 和偏移量为 (0,0)。(100 已任意选取) - 100x^2 - 10000 => y = [-10000, 100*] 且偏移量为 (-10000, 0)

我想我可以为每种类型的函数分配一个“范围”和“偏移量”,并创建一些数学来将这些范围相加/相乘/等,就像计算结果一样。然而,这需要“创造”一些数学,而且隐藏得很好的逻辑缺陷的可能性太高了。

必须有一种不太难的方法来做到这一点,但我就是找不到。是否有一些特定的术语要搜索?任何指向算法的指针?

4

3 回答 3

3

多么有趣的问题。我从来没有想过这个,但我会首先找到:

  1. 最接近原点的方程的两个根(可以使用Newton-Raphson算法)。
  2. 最大值和最小值。为此,您需要找到函数导数为 0 的位置。您可以进行数值微分并粗略地找到导数与 0 交叉的点,或者如果您有野心,您可以使用自动微分。找到导数的 0 交叉点后,返回并在这些点处评估原始方程。
  3. 每个 x 轴点处的函数值。

然后取每个轴上相距最远的点,将它们加 10%,并将它们用作边界框坐标。

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

于 2011-05-26T04:17:47.303 回答
1

最常见的图形有两个有趣的点是坐标系的原点(用于方向)和函数的 y 截距,这很容易计算。因此,我会选择这样的比例,使得原点 (0,0) 和 y 截距 (0,y0) 都可见,加上一些填充,即间隔 [-y0 - y0/5; y0 + y0/5]。如果 origin 和 y-intercept 恰好接近甚至相同,我会选择一个可见的间隔,例如 [-5; 5]。

这背后的基本原理是,一个公式化的函数应该在原点附近的某个地方有它有趣的部分,或者至少在 y 截距附近。如果没有,你根本无法判断用户想看什么,所以他应该自己处理。

于 2011-05-26T08:19:39.957 回答
0

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

  1. f(x)=0(穿越 x-zxis)
  2. f'(x)=0(最小/最大)
  3. f''(x)=0(改变曲率方向)
  4. f'''(x)=0(最大曲率,可能最小曲率可能不是很有趣)
于 2011-05-26T10:20:54.353 回答