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

Algorithm 图形计算器:如何找到要显示的图形的适当部分,algorithm,math,calculator,graphing,Algorithm,Math,Calculator,Graphing,我正在做一个图形计算器(你知道,在这个计算器中,你输入一个公式,比如x^2,你就可以得到这个函数的图形)。我遇到的问题是如何偏移和缩放图形视图,以显示函数的有趣部分 我已经用尽了我所有的“简单”想法。让我举一些例子: -sin(x)=>有趣的部分在y=[-1,1]和偏移量(0,0)之间 -x^2=>有趣的部分位于y=[01100]和偏移量(0,0)之间。(任意抽取100个) -100x^2-10000=>y=[-10000,100*],偏移量为(-10000,0) 我想我可以为每种类型的函数指定

我正在做一个图形计算器(你知道,在这个计算器中,你输入一个公式,比如x^2,你就可以得到这个函数的图形)。我遇到的问题是如何偏移和缩放图形视图,以显示函数的有趣部分

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

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


一定有一个不太难的方法,但我就是找不到。是否有一些特定的术语可供搜索?有算法的指针吗?

多有趣的问题。我从未想过这一点,但我会首先发现:

  • 距离原点最近的方程的两个根(可以使用该算法)
  • 最大值和最小值。为此,您需要找到函数导数为0的位置。你可以这样做,大致找到导数穿过0的点,或者如果你有雄心壮志,你可以使用。找到导数的0交叉点后,返回并在这些点上计算原始方程
  • 每个x轴点处的函数值
  • 然后取每个轴上相距最远的点,将其添加10%,并将其用作边界框坐标


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

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


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

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

  • f(x)=0(穿过x-zxis)
  • f'(x)=0(最小/最大)
  • f''(x)=0(改变曲率方向)
  • f''(x)=0(最大曲率,可能最小曲率可能不是很有趣)
  • 我认为没有“简单”的方法。识别“感兴趣区域”需要检测不连续性、导数和函数零点、渐近线等