一、Lerp : Linear interpolation : 线性插值

记为:Lerp(v0,v1,t)Lerp(\boldsymbol v_0, \boldsymbol v_1, t)Lerp(v0​,v1​,t), ttt 为插值权重。

Lerp(v0,v1,t)=(1−t)v0+tv1 Lerp(\boldsymbol v_0, \boldsymbol v_1, t) = (1-t)\boldsymbol v_0 + t\boldsymbol v_1 Lerp(v0​,v1​,t)=(1−t)v0​+tv1​
在这里插入图片描述

二、NLerp : Normalized Linear interpolation : 归一化线性插值

记为:NLerp(v0,v1,t)NLerp(\boldsymbol v_0, \boldsymbol v_1, t)NLerp(v0​,v1​,t), ttt 为插值权重。
这个和普通 LerpLerpLerp 不同的地方就是将插值后的 vLerp\boldsymbol v_{Lerp}vLerp​ 值归一化

NLerp(v0,v1,t)=(1−t)v0+tv1∥(1−t)v0+tv1∥ NLerp(\boldsymbol v_0, \boldsymbol v_1, t) = \frac{(1-t)\boldsymbol v_0 + t\boldsymbol v_1}{\Vert(1-t)\boldsymbol v_0 + t\boldsymbol v_1\Vert} NLerp(v0​,v1​,t)=∥(1−t)v0​+tv1​∥(1−t)v0​+tv1​​

在这里插入图片描述
由于是按照弦长的比例来插值的,即在弦上是匀速的,故在 角速度 或 弧 上并不匀速。

三、SLerp : Spherical Linear interpolation : 球面线性插值

为了解决插值角速度不匀速,引入了SLerp,记为:SLerp(v0,v1,t)SLerp(\boldsymbol v_0, \boldsymbol v_1, t)SLerp(v0​,v1​,t), ttt 为插值权重。

SLerp(v0,v1,t)=sin⁡((1−t)θ)sin⁡θv0+sin⁡(tθ)sin⁡θv1 SLerp(\boldsymbol v_0, \boldsymbol v_1, t) = \frac{\sin((1-t)\theta)}{\sin\theta}\boldsymbol v_0 + \frac{\sin(t\theta)}{\sin\theta}\boldsymbol v_1 SLerp(v0​,v1​,t)=sinθsin((1−t)θ)​v0​+sinθsin(tθ)​v1​

在这里插入图片描述
其中,θ\thetaθ 是 v0,v1\boldsymbol v_0, \boldsymbol v_1v0​,v1​ 之间的夹角。
可以看出他是角速度匀速的。

Slerp计算量较大,在 θ→0\theta\rightarrow0θ→0 时,sin⁡θ→θ\sin\theta \rightarrow \thetasinθ→θ,Slerp 退化为 Lerp

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐