slerp=spherical linear interpolation球面线性插值

翻译 2013年12月05日 14:49:18

四元数支持球形线性插值,也就是当点沿着球体表面移动也可以看做是从一个方位移到另一个方位。

http://en.wikipedia.org/wiki/Slerp

Slerp球面线性插值

在计算机图形学中,slerp是spherical linear interpolation(球面线性插值)的缩写。最初由Ken Shoemaker为了模拟3D旋转在四元数插值(quaternion interpolation)的基础上改进的方法。当给定末端且插值在0和1之间时,slerp指的是沿着单位半径大圆的常速运动。

Geometric Slerp(几何球面线性插值)


Slerp有一个独立于四元数(quaternion)和弧所在空间维数的几何方程。这个方程利用Glenn Davis提出的对称加权和方法,曲线上的任意一点必是两个终点的线性组合。假设P0和P1是圆弧的起点和终点,t代表参数且0 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)单参数子集和单位四元数泛覆盖群S^3的线段。Slerp给出它的四元数端点之间的最直接最短的路径,以及2^Ω角度的旋转。然而,因为覆盖是对称的(q和-q都可以是相同的旋转),旋转路径要么是最短的(<180°)要么是最长的(>180°),这可以用cosΩ(-90°≤Ω≤90°)来限定。Slerp也可以由四元数代数方程表述,都是用指数。


把单位四元数q写成规范化形式,cosΩ+vsinΩ,v是3维单位向量且v^2=-1(要写成欧拉方程),因此有e^vΩ=q,q^t=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可以扩展到在许多单位四元数之间插值,但却以牺牲四元数算法运算时间为代价。





相关文章推荐

插值原理—线性,球面插值 ,四元数

3D空间中,在等长度的两个交角为theta的向量v1(x1,y1,z1),v2(x2,y2,z2)之间进行球面线性插值。 1。一般线性插值: 我们知道一般两个量之间进行线性插值的方法为: v(t) =...

Unity3D 物体旋转之Quaternion.Slerp

实现的功能:1个物体以一定的速度转向目标物体 Quaternion TargetRotation = Quaternion.LookRotation(m_Target.transform.posit...

slerp插值的实现

游戏作业刚好有这个,看了unity有自带的

【游戏课】技术片段之——球面线性插值(SLERP)

球面线性插值(Spherical linear interpolation,通常简称Slerp),是四元数的一种线性插值运算,主要用于在两个表示旋转的四元数之间平滑差值。(wiki) cos Ω...

球面线性插值(Spherical Linear Interpolation,Slerp)

球面线性插值Spherical Linear Interpolation

彻底搞懂四元数

提要旋转的表达方式有很多种,有欧拉角,旋转矩阵,轴角,四元素等等,今天要学习的就是游戏开发中最常用的四元素。从欧拉角和轴向角到四元数在讲四元素之前,我们先来看下简单的欧拉角和轴向角。欧拉角使用最简单的...

欧拉角

角位移        角位移(Angular displacement)描述物体转动时位置变化的物理量。        概念:构件内任意一线段(或平面)由原始位置到新位...

写在成为csdn认证专家这天

上周五试着申请了了下专家的勋章,本以为没戏了,结果几天意外接到通知,还是蛮开心的,去年元旦给自己定下的一个目标算是实现了。 刚好最近把codepad2给搞定了,就来码一些字吧。 一路走来,从当初的纯小...

空间向量类Vector3的C++实现

double getDree( Node a, Node b ) { //求向量a,b之间的夹角 double c, d; c = a.x*b.x + a.y*b.y + a.z*b.z;...

四元数的插值

委婉梵蒂冈梵蒂冈地方
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)