我相信您想要分三部分解决问题。
首先,您需要解决完成在时间T内完成距离所需的最小速度。
这很简单(D/t)= v(min)。
它假定从v(initial)到v(min)瞬间加速,然后在开始和结束时有0秒的时间段进行减速。
例如,假设您的v(i)为5px/s。您想要在10秒内完成100px的移动。
v(min) = 100px/10s = 10px/s
其次,您希望从v(initial)到v(min)平稳加速。这将需要一定的时间t(acc)。假设加速和减速是相等的,那么您只需计算其中一个,然后乘以2即可。我们可以称描述加速期间行驶距离的函数为D(accel)。
让我们先保持简单,假设我们希望加速持续1秒钟。
因此,您的总行驶距离方程式将为
D(total) = D(accel) + D(v(max))
当您知道D(accel)总共需要2秒时,您可以计算
D(accel) = (V(ini) + V(max))/2 * (2秒)
以及
D(v(max)) = V(max) * 8秒
解出 V(max) 我们得到
100像素 = D(accel) + D(v(max))
100像素 = (5像素/秒 + VMax)/2*(2秒) + VMax*8秒
100像素 = 5像素 + (Vmax*1秒) + Vmax*8秒
95像素 = 9Vmax*秒
VMax = 95像素/9秒
VMax = 10.556像素/秒
现在,您可以返回并用定义加速窗口为整个时间段的百分比或其他方式的公式替换您的1秒加速窗口。
还要注意,为了动画效果,您需要将10.556像素/秒分解为每帧像素移动,并适当计算时间。