线性变焦功能 2D

Str*_*rnd 3 math canvas zooming

我有一个画布和一个比例值。最大比例为 1,最小比例值为 0.1 或以上。\n让\xe2\x80\x99s 表示我们有离散时间单位。I\xe2\x80\x99m 寻找一个在一定时间间隔I(假设 100 个时间单位)内从开始缩放s到结束缩放线性缩放的函数e。让0 >= i < I为当前间隔。

\n\n

示例:以 100 个时间单位从 0.2 缩放到 1.0。

\n\n

显然zoom(i) = (e-s)/I * i不会产生线性变焦。因为从 0.2 到 0.4 的步长会使缩放加倍,而从 0.8 到 1.0 的相同数量只会使缩放增加 25%。

\n\n

我认为这个函数需要以 2 为底的对数,但我\xe2\x80\x99m 一直在寻找正确的函数。

\n

MBo*_*MBo 5

要提供具有恒定参数差的恒定比率,您需要指数函数(可以使用任何底数, 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)