几何算法系列文章
四元数支持球形线性插值,也就是当点沿着球体表面移动也可以看做是从一个方位移到另一个方位。
Slerp球面线性插值
在计算机图形学中,slerp是spherical linear interpolation(球面线性插值)的缩写。最初由Ken Shoemaker为了模拟3D旋转在四元数插值(quaternion interpolation)的基础上改进的方法。当给定末端且插值在0和1之间时,slerp指的是沿着单位半径大圆的常速运动。
一、Geometric Slerp(几何球面线性插值)
Slerp有一个独立于四元数(quaternion)和弧所在空间维数的几何方程。这个方程利用Glenn Davis提出的对称加权和方法,曲线上的任意一点必是两个终点的线性组合。假设P0和P1是圆弧的起点和终点,t代表参数且0≤ t ≤1,Ω是圆弧的圆心角,cosΩ=P0 • P1,即单位n维向量起点和终点的点积,几何方程可写做:
由于Slerp(P0, P1; t)=Slerp(P0, P1; 1- t),所以称该方程具有对称特性。Ω→0时,这个方程就退化为线性插值方程:
Slerp路径实际上就是平面线段在球面几何上的等效。一种特殊的情况就是两个终点向量垂直时,方程可写做:
当θ=tπ/2时就成了slerp方程。一般方程中的1/sinΩ是标准化因子,因为P1投影到⊥P0上的长度为sinΩ。
在一些特殊的例子中,Slerp允许更高效的运算。当圆弧用像素图表示时,更优先的方法是Bresenham的圆胡算法。在0,1/2,1处分别为P0,(P0+P1)/2,P1;如果Pk-1和Pk是两个连续的值,c是二者点积的2倍(所有步都是定值),则Pk+1=cPk-Pk-1。
二、Quaternion Slerp四元数球面线性插值
当Slerp用在单位四元数中时,四元数路径会映射到标准3D旋转路径,其效果就是绕着固定轴做匀速旋转。当初始点是同一四元数时,Slerp给出3D旋转李氏群S0(3)单参数子集和单位四元数泛覆盖群S3的线段。Slerp给出它的四元数端点之间的最直接最短的路径,以及2Ω角度的旋转。然而,因为覆盖是对称的(q和-q都可以是相同的旋转),旋转路径要么是最短的(<180°)要么是最长的(>180°),这可以用cosΩ(-90°≤Ω≤90°)来限定。Slerp也可以由四元数代数方程表述,都是用指数。
把单位四元数q写成规范化形式,cosΩ+vsinΩ,v是3维单位向量且v2=-1(要写成欧拉方程),因此有evΩ=q,qt=costΩ+vsintΩ。其中q=q1q0(-1),以使q的实部为cosΩ。以下是四个等效的Slerp四元数表达式:
当终端确定时,Slerp(P0, P1; t)对t的导数为log(q1q0^(-1))乘四元数的自然对数是3D角速度向量一半时的函数值。最初的切向量被沿着曲线平行传输到每一个切线上,从而保证曲线是最短的。
在四元数Slerp曲线上的任何一点的切线空间中,指数映射的逆把曲线变换成了线段。没有通过一个点进行延伸的slerp曲线则不会。四元数slerp通过模仿类似被赛尔曲线de Casteljau 算法的仿射结构来构造平滑曲线。因为球面不是仿射空间所以就不能用仿射变换的特性,尽管这样构造的曲线可能不太满意。例如,de Casteljau算法用来分离一条仿射空间的曲线,这不能应用在球面上。
二值Slerp可以扩展到在许多单位四元数之间插值,但却以牺牲四元数算法运算时间为代价。
参考文献
http://en.wikipedia.org/wiki/Slerp