界面移动若匀速启动和停止,速度会在两端突然改变。一条自定三次曲线可以让归一化进度仍从零走到一,同时使两端的变化率为零。
把时间除以总时长并限制到零至一,记为t。进度使用3t平方减2t立方,位置由起点加位移乘进度得到。区间外固定在端点,不继续外推。
起点15,终点21,总时长9
时刻-1,限制后的归一化时间0,平滑进度0,位置15,对实际时间的变化率0。
时刻0,限制后的归一化时间0,平滑进度0,位置15,对实际时间的变化率0。
时刻9/4,限制后的归一化时间1/4,平滑进度5/32,位置255/16,对实际时间的变化率3/4。
时刻9/2,限制后的归一化时间1/2,平滑进度1/2,位置18,对实际时间的变化率1。
时刻27/4,限制后的归一化时间3/4,平滑进度27/32,位置321/16,对实际时间的变化率3/4。
时刻9,限制后的归一化时间1,平滑进度1,位置21,对实际时间的变化率0。
时刻10,限制后的归一化时间1,平滑进度1,位置21,对实际时间的变化率0。
时刻43/8,限制后的归一化时间43/72,平滑进度120185/186624,位置586745/31104,对实际时间的变化率1247/1296。
时刻7/2,限制后的归一化时间7/18,平滑进度245/729,位置4135/243,对实际时间的变化率77/81。
时刻35/8,限制后的归一化时间35/72,平滑进度89425/186624,位置555985/31104,对实际时间的变化率1295/1296。
时刻37/8,限制后的归一化时间37/72,平滑进度97199/186624,位置563759/31104,对实际时间的变化率1295/1296。
负时刻与结束之后都固定在端点。位移为负时,位置变化率也相应为负,但归一化进度仍从零增加到一;方向与进度的单调性应分别理解。
在有效区间,进度变化率为6t乘1减t;位置的时间变化率还要乘总位移并除以总时长。中点进度恰好一半,两端速度为零,但中间不是匀速运动。
复核时先保留本例输入,再自己写出中间状态。若结果不同,应从最早出现差异的位置检查,尤其留意边界是否包含、索引从哪里开始、取整何时发生,以及是否使用了尚未更新的旧状态。计算得到的结论仅适用于已经说明的规则,修改规则后需要重新验证。
本例控制的是标量位置,不自动处理碰撞和路径拐弯。曲线在区间内单调,不会越过端点;若用于角度或循环坐标,还需要先明确插值方向与坐标的表示方式。