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可以扩展到在许多单位四元数之间插值,但却以牺牲四元数算法运算时间为代价。





slerp插值的实现

游戏作业刚好有这个,看了unity有自带的
  • jainglai
  • jainglai
  • 2014年05月08日 22:43
  • 1430

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

球面线性插值Spherical Linear Interpolation
  • zb1165048017
  • zb1165048017
  • 2015年09月13日 21:35
  • 4716

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

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

球面线性插值

  • 2016年12月26日 19:59
  • 647KB
  • 下载

Unity 之Vector3的球形插值Slerp详解

Vector3.Slerp 球形插值详解 首先上官方的文档信息,方面还没有看过的同学学习。         static function Vector3 Slerp (Vector3 from,...
  • qq563129582
  • qq563129582
  • 2017年02月05日 20:37
  • 3319

Vector3.Slerp 球形插值详解

原文地址:http://www.manew.com/thread-43314-1-1.html?_dsign=09e5efeb 首先上官方的文档信息,方面还没有看过的同学学习。         ...
  • puppet_master
  • puppet_master
  • 2017年05月16日 14:29
  • 463

Vector3.Slerp 球形插值详解

首先上官方的文档信息,方面还没有看过的同学学习。         static function Vector3 Slerp (Vector3 from, Vector3to, float t) ...
  • brucethl
  • brucethl
  • 2017年02月10日 10:44
  • 650

Unity之Vector3.Slerp球形插值原理介绍

Unity之Vector3.Slerp球形插值原理介绍
  • qq_26999509
  • qq_26999509
  • 2016年12月09日 20:34
  • 1149

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

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

Unity Vector3.Slerp() 球形插值详解之二

增加 Vector3. Slerp(Vector3 a, Vector3 b, float t)函数的理解
  • ZFSR05255134
  • ZFSR05255134
  • 2016年04月06日 16:01
  • 2803
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:slerp=spherical linear interpolation球面线性插值
举报原因:
原因补充:

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