三维旋转四元数系列(5.四元数的插值)
三维旋转四元数系列(3.四元数定义与基本性质)https://blog.csdn.net/SKANK911/article/details/90186556
三维旋转四元数系列(4.四元数三维旋转表达)https://blog.csdn.net/SKANK911/article/details/90189234
/-----------------------------------------------------------------------------------------------------------------------------------------------/
序:上两节我们介绍了四元数及其性质,以及四元数如何表示三维旋转。基于四元数的这些特性,其插值相比与轴角、旋转矩阵、欧拉角更加容易。这一节我们就来谈谈四元数的插值。
1.四元数插值问题转化为四维向量空间夹角
上一节三维旋转四元数系统(4.四元数三维旋转表达)的证明部分我得到了结论,三维空间中的Ѳ度旋转,是四元数,经过两次变换得到的。
即。更直观的理解这层关系请看下图。
q1与q0之间的夹⻆为Ѳ时,旋转的变化量正好是2Ѳ。
如上图,插值时即为找到在q0与q1之间的qt对应,v0与v1之间的vt。我们可以将两个四元数的插值问题从四维空间投影到上左图的二维空间圆上,可以看为一个超球的横截面。那么两个四元数的插值就被我们简化为两个向量的插值。
2.Lerp, Nlerp, Slerp
2.1 lerp
lerp线性插值(Linear Interpolation)是向量插值最简单的一种形式。
如上图所示,vt即为在v1、v0连线上的一点到原点的向量。我们假设v1vt与vtv0比例为1-t:t则vt可用下式表达:
将lerp法的插值作用在我们上述四元数问题中为:
很明显,这样的插值法得到的并非单位四元数,如下图所示:
2.2 Nlerp
在lerp的基础上引入归一化/正规化(Normalization),即qt除以其模长。先进行lerp插值再将输入向量转为单位向量,这种方法称为Nlerp插值(Normalized Linear Interpolation)。
这样的插值方法虽然保证了插值四元数仍为单位四元数,但对于三维旋转来说,其角速度不均匀。如上图所示,按照Nlerp的插值方法对v1v0线段进行四等分,得到了三个插值结果,很明显相同t的变化量对应的旋转角度不同。
2.3 Slerp
Slerp球面线性插值(Spherical Linear Interpolation)便是为了解决上述问题,
这里我们直接就给出Slerp插值的公式:
向量Slerp插值:
四元数Slerp插值:
q0,q1夹角Ѳ为cos q0与q1点乘的反函数:arccos(q0•q1)
注:
①当四元数夹角Ѳ较小时为了避免计算机将sinѲ近似记为0,我们将用Nlerp代替Slerp方法,此时的Nlerp结果基本与Slerp法结果一致。
②上一节3.2部分中我们讲到,四元数表达三维旋转不具备唯一性,三维空间的任意旋转都可以由两个互为相反数的四元数表示。这个性质显然会影响四元数的插值。因此在插值运算时,先要检测q0与q1的向量点积是否为负(夹角Ѳ为钝角),若为负q0q1其中一个去负,再计算新的插值。Eg:qo与-q1之间进行新的插值。
③上述方法的插值仅考虑了两个四元数的情况,当多个四元数进行插值时,角速度就有可能发生突变。为了得到更加平滑连续的插值结果,有时也是要取消固定角速度的约束,在一阶或高阶导数上需求连续性的结果。因此还有Squad球面四边形插值 (Spherical and quadrangle)、三次 Bézier曲线(Cubic Bézier Curve)等方法,我们这里就不做过多介绍了。
三维旋转四元数系列(5.四元数的插值)相关推荐
- 三维旋转四元数系列(4.四元数三维旋转表达)
三维旋转四元数系列(0.复数基本介绍)https://blog.csdn.net/SKANK911/article/details/90033451 三维旋转四元数系列(1.复数与二维旋转)https ...
- 三维旋转四元数系列(3.四元数定义与基本性质)
三维旋转四元数系列(0.复数基本介绍)https://blog.csdn.net/SKANK911/article/details/90033451 三维旋转四元数系列(1.复数与二维旋转)https ...
- 三维旋转四元数系列(2.三维旋转之轴角与罗德里格斯公式推导)
序:上两节我们介绍了复数的基本概念与性质,以及复数与二维旋转的关系. 三维旋转四元数系列(0.复数基本介绍)https://blog.csdn.net/SKANK911/article/details ...
- 资料分享:四元数与三维旋转 | 故事:四维虫子
该分享来自鱼粉me,资料为pdf格式,主要阐述四元数和三维旋转,作者为Krasjet. 公众号后台回复:四元数 获取完整PDF 故事分享-四维虫子 他:"你好." 我:" ...
- 四元数,对偶四元数,三维旋转,平移
注:本文中, 带箭头的粗体字母(如 n ⃗ \vec{\boldsymbol n} n )表示 三维向量 不带箭头的粗体字母(如 q \boldsymbol q q)表示 四元数 顶上带尖尖的粗体字母 ...
- 彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美
目录 旋转矩阵 坐标变换的作用 实现坐标变换所需的数据 位姿变换 坐标变换中旋转的实质 坐标变换中平移的实质 如何计算坐标系B各坐标轴在坐标系A上的投影?(多坐标变换) 如何实现坐标变换? 欧拉角 欧 ...
- 姿态解算基础知识(二)-旋转矢量坐标变换的四元数描述的验证
姿态解算基础知识(二)-旋转矢量坐标变换的四元数描述的验证 2015-11-14 补充下四元数的知识及上篇博文提到的旋转矢量坐标变换的四元数描述的推导过程. 四元数q可以看出由一个实数和一个三维矢量组 ...
- 一、旋转矩阵,旋转向量,单位四元数的相互转换总结
文章目录 前言 一.要点 1. 旋转矩阵 2. 旋转向量 3. 单位四元数 二.旋转向量--->旋转矩阵(罗德里格斯公式) 三.旋转矩阵--->旋转向量 四.单位四元数--->旋转矩 ...
- 【MATLAB】三维旋转的实现
1 三维旋转的表达方式 三维空间中常用的表示旋转的方式有: **[1]旋转矩阵(rotation matrix) [2]旋转向量(rotation vector)/角轴(轴角)(axis angle) ...
最新文章
- 部分和模板的复杂嵌套
- h5 img js 点击图片放大_5分钟学会h5生成图片海报!
- kuka机器人if逻辑编程_KUKA机器人调试的程序语法是什么
- Java集合---Arrays类源码解析
- oc 实例变量可见度、方法
- php 字符组成数组,php分割字符串并返回由字符串组成的数组的函数explode()
- phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护...
- 如何让微软Onedrive同步其他硬盘的文件
- python蓝屏代码_死机、卡顿、蓝屏,Python部门的老江湖告诉我的一些超级变态代码...
- 电机PID控制补充篇-野火上位机串口协议介绍
- java 以10为底的对数_log以10为底0.5的对数怎么算
- js将数字的金额转换成中文大写金额
- mac关闭当前窗口快捷键,mac关闭当前应用快捷键
- Ubuntu下Linux常用命令练习作业题(1)
- 计算机组成原理课程设计:在复杂模型机上编写机器指令与微程序计算海伦公式
- [HDU-6578]
- android ant批量打包
- oracle- 审计日志
- Krpano学习:在javascript中动态添加/删除/修改(位置)热点(向后端写入)
- Hi3516A 烧录内核后无法ping通网关和自己
热门文章
- 《Java编程思想》读后总结(一)
- HDMI接口电路设计
- arc hdmi 接线图_HDMI ARC功能详解及应用介绍
- BRISK特征 学习笔记
- ResultSet接口
- 软件设计师考试-法律法规与多媒体部分的笔记
- Servlet 基础练习题
- 详述 Java 中过滤器 Filter 的工作原理及使用方法
- npm ERR path C:\Users\H\Desktop\renren-fast-vue\node_modules\node-sass
- matlab 绘制一分钟k线图,超短线分钟,1分钟k线图最佳买卖点