21插值:位置与旋转

演示 1 · 掉头 + 抽帧 演示 2 · 线性 vs 短弧 演示 3 · SLERP 用在位置上
这一页要讲清的五件事
  1. 模拟实际的掉头,车的 yaw 一路涨,涨到 180° 之后会「翻号」成 −180°
  2. 抽帧,关键帧只存那几个"翻号"后的数
  3. 线性插值会怎样,在两帧之间凭空转 180°,车头指向反方向
  4. 短弧插值(SLERP)怎样,走最短的那一段,车头平滑地转过去
  5. SLERP 用到「直线」上是否可行,不可行,而且错得离谱(演示 3)
先记住这一句

朝向住在「圆」上,位置住在「平的空间」里。

圆上「插值」必须走最短的那一段弧;平的空间里「插值」就是连一条线段。 把这两个搞反,两个都会错。


一、掉头的时候,数据里发生了什么

一辆车在路口掉头。它车头的朝向角 yaw 一路往一个方向涨。

但数据里,yaw 一般只存 −180° ~ +180°。所以:

车实际朝向 90° 120° 150° 175° 185° 200° 230° 260° ─────────────────┼────────────────────── 数据里存的是 90° 120° 150° 175° −175° −160° −130° −100° ↑ 这里「翻了个号」
关键:这不是车掉头了

185° 和 −175° 是【同一个朝向】。只是同一个朝向有两套写法,数据里选了后一套。

于是那些数看起来「从 175° 掉到了 −175°」,但车其实一直在往同一个方向转。

现在让插值登场:如果你直接把两帧的数做线性插值(取平均), 你就会拿到 175° 和 −175° 的中间值,也就是 0°。

而车的真实朝向在那一刻是 180°。差 180°,车头正好指向反方向。


二、演示 1 · 掉头:真值 / 线性 / 短弧

左边俯视图(车在掉头),右边是 yaw 随时间的曲线。 白 = 真值,红 = 线性插值,绿 = 短弧插值。

掉头 · 抽帧 · 两种插值 拖时间轴 → 看三个车头的朝向
俯视图 白=真值 红=线性 绿=短弧 红弧=跨接缝的那一段
yaw 随时间 虚线 = ±180° 接缝
从演示里能读出的三件事

① 红线的"跳崖"只发生在一段里,就是跨过 ±180° 接缝的那一段。 关键帧加密到 8 段,也别指望它消失:只会让那一段变短。

② 绿线和白线完全重合,短弧插值的误差是 0.00°。因为它走的是"最短的那一段"。

③ 关键帧上三个车永远重合,那三个点本来是给你的。 插值的好坏只能在【两帧之间】看出来,这是检验插值的唯一方式。


三、演示 2 · SLERP 用在「位置」上会怎样

刚才短弧插值(SLERP)救了 yaw。那它能不能拿去插位置?

不能。因为:

这个量住在什么空间该怎么插
朝向 yaw、速度方向、视线方向弯的(圆 / 球面)沿最短弧(SLERP)
位置、尺寸、速度大小、温度平的连线段(线性)

下面把 SLERP 硬套到位置上,看它会把一条直线掰成什么。

SLERP 用在位置上,负例 绿=线性(对) 红=球面(错)
两个关键帧之间的路径 绿=线性 红=球面(把位置当成了方向)

为什么红的往外鼓?

绿色是两点之间连一条线段,这正是"位置"该有的插法。

红色是先把两点当成"方向"(压到同一个球面上),再沿球面走 于是整条路径被推到球面上去。

而球面比弦更远离原点,所以弧总是往外鼓。

夹角 = 0(两点同方向)时两者重合,那才是唯一"碰巧对"的情形。

为什么错得这么离谱

SLERP 只接受"方向"(单位向量)。要把位置喂给它,你得先把位置当成"距原点的方向和距离"。

于是插值出来的路径,是一条以原点为中心的弧,而不是两点之间的直线。

偏差有多大:取决于这两个点到原点的夹角。夹角越大,弧越夸张。 ,这不是"精度差一点",是【形状错了】。

那"方向"上用它就对了?

对,而且必须用。比如速度的方向:车在转弯,速度方向在改变, 而"方向"本身就住在球面上,这时线性插值会让方向不匀速地偏,SLERP 才对。

判据一句话:这个量加一倍还有意义吗?
朝向加一倍没意义(360° 就回到原点)→ 弯空间 → SLERP
位置加一倍有意义(走远了)→ 平空间 → 线性


四、结论

问题答案
掉头时数据里发生了什么yaw 一路涨,涨过 180° 后"翻号"成负数。这不是车掉头,是数字换了写法。
抽帧抽的是什么只存那几个已经翻过号的数。于是两帧之间,数字上看起来"掉了 350°"。
线性插值为什么错它在数轴上取中点,而数轴是直的,朝向住在圆上。
结果:车头指向反方向,误差 180°(这是最大可能的误差)。
短弧插值为什么对它先算"往哪边转更近",再沿那段弧走。误差 0.00°。
SLERP 能不能用在位置上不能。位置住在平空间,SLERP 会把它当方向,凭空走出一条弧。
三句话收尾

① 朝向住在圆上,所以它有"接缝",而接缝的位置是坐标系决定的,不是物理的。

② 圆上的插值必须走最短弧,直接对数字取平均,会在接缝处凭空转 180°。

③同一个工具,一个场景里对、一个场景里错,判据是"这个量加一倍还有意义吗"。

数据:掉头半径 4 m,起始 yaw 90°,共转 170°(终了 −100°)。 演示 2 的两点:A=(6,1)、B=(1,6),夹角 71.1°,最大偏差 1.13 m。
← 上一页 ·  下一页 →
京ICP备19013239号