Spherical linear interpolation for Quaternions (四元数的球面插值计算)
在pbrt中介绍四元数的时候,看到有介绍 四元数的 球面插值公式 的推导,在这里记录一下:
公式1 :
公式1推导:
如图,
目的就是为了求 vt,其实观察得到
vt = k0 * v0 + k1 * v1
看图得到, k0v0 对应的就是蓝色的那条边,k1v1 对应的就是红色的那条边。
注意,k1v1 与 v1 是平行的,v0,v1,vk都是单位向量
所以下面就是要求 k0,k1.
对于k1v1为斜边的直角三角形应用三角公式得:
那就是绿色的那条边(x)对应了2个三角形,根据三角形公式可以得到:
sin(tw) = x / vt
sin(w) = x / k1v1
由于 v0,v1,vk都是单位向量
所以:
sin(tw) = x
sin(w) = x / k1
得到
k1 = sin(tw) / sin(w)
下面再来 计算 k0
如图, 红色的那条是两个三角形共有的,绿色的那条是与 k0v0平行,并且长度一致的,
红色的是x,
那么就可以得到
sin((1-t)w) = x / vt
sin(w) = 红色 / 绿色 = x / k0v0
因为v0,v1,vk都是单位向量
所以就可以得到:
sin((1-t)w) = x
sin(w) = x / k0
k0 = sin((1-t)w) / sin(w)
那么 k0,k1都可以计算了,最后的 vt也可以得到了。