Str*_*rnd 3 math canvas zooming
我有一个画布和一个比例值。最大比例为 1,最小比例值为 0.1 或以上。\n让\xe2\x80\x99s 表示我们有离散时间单位。I\xe2\x80\x99m 寻找一个在一定时间间隔I(假设 100 个时间单位)内从开始缩放s到结束缩放线性缩放的函数e。让0 >= i < I为当前间隔。
示例:以 100 个时间单位从 0.2 缩放到 1.0。
\n\n显然zoom(i) = (e-s)/I * i不会产生线性变焦。因为从 0.2 到 0.4 的步长会使缩放加倍,而从 0.8 到 1.0 的相同数量只会使缩放增加 25%。
我认为这个函数需要以 2 为底的对数,但我\xe2\x80\x99m 一直在寻找正确的函数。
\n要提供具有恒定参数差的恒定比率,您需要指数函数(可以使用任何底数, e, 2, 10等等以及相应的对数)
F(x) = A * Exp(B * x)
Run Code Online (Sandbox Code Playgroud)
要获得给定边界条件的系数 A 和 B(参数 x0 对应于函数值 F0):
F0 = A * Exp(B * x0)
F1 = A * Exp(B * x1)
Run Code Online (Sandbox Code Playgroud)
将第二个方程除以第一个方程:
Exp(B * (x1 -x0) = F1 / F0
B * (x1 -x0) = ln(F1 / F0)
Run Code Online (Sandbox Code Playgroud)
所以
B = ln(F1 / F0) / (x1 - x0)
Run Code Online (Sandbox Code Playgroud)
和
A = F0 * Exp(-B * x0)
Run Code Online (Sandbox Code Playgroud)
对于你的例子
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)
Run Code Online (Sandbox Code Playgroud)