云南省昆明市盘龙区北京路915号地铁线网控制中心 14899584169 J909@aglaoge.vip

游戏中心

三个控制点如何生成一条二次曲线:九次二级插值的曲线采样·案例13

2026-11-02

想让镜头或标记沿一条平滑弯线移动,可以先在两个相邻控制点之间取位置,再在这两个中间位置之间取位置。中间控制点影响弯曲方向,却通常不是曲线必经的位置。

以下是一组可按记录复查的虚构游戏例子。它先固定输入、单位和执行顺序,再展示每一步结果。读者可以用纸笔挑出几步核对,不需要依赖具体游戏的后台数据。

明确规则与输入

三个二维控制点依次为起点、控制点、终点。参数从零到一,先按参数在前两点和后两点分别线性插值,再在所得两点之间按同一参数插值。九个参数等间隔,结果使用精确分数。

起点、控制点、终点依次[[-3, -2], [-2, 7], [-6, -8]]

完整计算过程

参数0:前两点中间位置['-3', '-2'],后两点中间位置['-2', '7'],再次插值得曲线位置['-3', '-2']。原三点权重['1', '0', '0']。

参数1/8:前两点中间位置['-23/8', '-7/8'],后两点中间位置['-5/2', '41/8'],再次插值得曲线位置['-181/64', '-1/8']。原三点权重['49/64', '7/32', '1/64']。

参数1/4:前两点中间位置['-11/4', '1/4'],后两点中间位置['-3', '13/4'],再次插值得曲线位置['-45/16', '1']。原三点权重['9/16', '3/8', '1/16']。

参数3/8:前两点中间位置['-21/8', '11/8'],后两点中间位置['-7/2', '11/8'],再次插值得曲线位置['-189/64', '11/8']。原三点权重['25/64', '15/32', '9/64']。

参数1/2:前两点中间位置['-5/2', '5/2'],后两点中间位置['-4', '-1/2'],再次插值得曲线位置['-13/4', '1']。原三点权重['1/4', '1/2', '1/4']。

参数5/8:前两点中间位置['-19/8', '29/8'],后两点中间位置['-9/2', '-19/8'],再次插值得曲线位置['-237/64', '-1/8']。原三点权重['9/64', '15/32', '25/64']。

参数3/4:前两点中间位置['-9/4', '19/4'],后两点中间位置['-5', '-17/4'],再次插值得曲线位置['-69/16', '-2']。原三点权重['1/16', '3/8', '9/16']。

参数7/8:前两点中间位置['-17/8', '47/8'],后两点中间位置['-11/2', '-49/8'],再次插值得曲线位置['-325/64', '-37/8']。原三点权重['1/64', '7/32', '49/64']。

参数1:前两点中间位置['-2', '7'],后两点中间位置['-6', '-8'],再次插值得曲线位置['-6', '-8']。原三点权重['0', '0', '1']。

九个样本从[-3, -2]到[-6, -8],控制点[-2, 7]用于改变形状,不被强制列作中间必经点。

独立核对与边界

展开两次插值,三个原始点的权重分别为(一减参数)整体的平方、二乘参数乘一减参数、参数的平方。权重和为一,端点参数应准确回到起点和终点;逐轴比较两种算法。

参数等间隔不等于沿弧长等距离,因此用匀速推进参数未必产生恒定移动速度。这里不计算弧长或碰撞,也不直接承诺任何游戏相机的运动手感。控制点位置和实际采样点要分开看。

练习时只改变一个条件,先判断哪些中间步骤应当受影响,再重新计算。要把空状态、数值零和未能确定的结果分开。边界约定不同可能产生不同答案,复查的目标是确认输入、过程与规则一致,而不是只追求最后一个数字看起来相同。