Spherical linear interpolation for Quaternions (四元数的球面插值计算)

在pbrt中介绍四元数的时候,看到有介绍 四元数的 球面插值公式 的推导,在这里记录一下:


公式1 :

Spherical linear interpolation for Quaternions (四元数的球面插值计算)


公式1推导:



如图,

Spherical linear interpolation for Quaternions (四元数的球面插值计算)




目的就是为了求 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


Spherical linear interpolation for Quaternions (四元数的球面插值计算)



如图, 红色的那条是两个三角形共有的,绿色的那条是与 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也可以得到了。


Spherical linear interpolation for Quaternions (四元数的球面插值计算)