我有一个画布和一个比例尺值。最大标度为1,最小标度值约为0.1或更高。假设我们有离散的时间单位。我正在寻找一个函数,在一个时间间隔I (假设100个时间单位)的线性放大,从一个开始缩放s到一个结束变焦e。让0 >= i < I是当前的间隔。
示例:在100个时间单位内从0.2放大到1.0。
显然,zoom(i) = (e-s)/I * i不会产生线性缩放。因为从0.2到0.4是变焦的两倍,而从0.8到1.0的相同比例只会使变焦增加25%。
我在想,这个函数需要对基数2的对数,但我被困在找到正确的函数。
发布于 2017-12-14 17:33:27
若要提供具有常数参数差的常数比率,则需要指数函数(可以使用任意基数、e, 2, 10等与相应的对数)。
F(x) = A * Exp(B * x)要获得给定边框条件下的系数A和B(参数x0对应于函数值F0):
F0 = A * Exp(B * x0)
F1 = A * Exp(B * x1)将第二个方程除以第一个方程:
Exp(B * (x1 -x0) = F1 / F0
B * (x1 -x0) = ln(F1 / F0)所以
B = ln(F1 / F0) / (x1 - x0)和
A = F0 * Exp(-B * x0)作为你的例子
x0=0, x1=100
zoom0 = 0.2, zoom1=1
B = ln(5) / 100 = 0.0161
A = 0.2 * Exp(0) = 0.2
zoom(i) = 0.2 * Exp(0.0161 * i)
zoom(0) = 0.2
zoom(50) = 0.447
zoom(100) = 1
note that
zoom(50) / zoom(0) = zoom(100) / zoom(50)发布于 2017-12-14 17:38:43
你需要的不是对数而是根部。您的需求实际上如下所示:您希望找到这样的序列A[i]
A[0] = 0.1A[N] =1A[i+1]/A[i] = k,其中k是一些常数很明显,解决这个问题的方法是
A[i] = 0.1 * k^i所以k应该是
k^N = 1/0.1 = 10或
k = root(10, N) = 10^(1/N)出于实际原因,最好使用N,它的幂为2,所以你可以计算一些中间结果,通过乘以一个较小的根,有较少的四舍五入误差累积。我的意思是
a[N/2] = sqrt(0.1) = 0.1 * sqrt(1/0.1)
a[N/4] = 0.1 * root(1/0.1, 4)
a[3*N/4] = a[N/2] * root(1/0.1, 4)将0.1的起始值更改为本身具有某种功能的东西,例如1/9或1/16,也可能是有意义的。
https://stackoverflow.com/questions/47818880
复制相似问题