ARCore中四元数差值算法:

其中t的取值范围为[0, 1],当 t = 0 时,结果为a;当t = 1 时,结果为b。

   public static Quaternion makeInterpolated(Quaternion a, Quaternion b, float t) {
Quaternion out = new Quaternion();
float cosHalfTheta = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
if(cosHalfTheta < 0.0F) {
b = new Quaternion(b);
cosHalfTheta = -cosHalfTheta;
b.x = -b.x;
b.y = -b.y;
b.z = -b.z;
b.w = -b.w;
} float halfTheta = (float)Math.acos((double)cosHalfTheta);
float sinHalfTheta = (float)Math.sqrt((double)(1.0F - cosHalfTheta * cosHalfTheta));
float ratioA;
float ratioB;
if((double)Math.abs(sinHalfTheta) > 0.001D) {
float oneOverSinHalfTheta = 1.0F / sinHalfTheta;
ratioA = (float)Math.sin((double)((1.0F - t) * halfTheta)) * oneOverSinHalfTheta;
ratioB = (float)Math.sin((double)(t * halfTheta)) * oneOverSinHalfTheta;
} else {
ratioA = 1.0F - t;
ratioB = t;
} out.x = ratioA * a.x + ratioB * b.x;
out.y = ratioA * a.y + ratioB * b.y;
out.z = ratioA * a.z + ratioB * b.z;
out.w = ratioA * a.w + ratioB * b.w;
out.normalizeInPlace();
return out;
}

ARCore中四元数的插值算法实现的更多相关文章

  1. ARCore中Pose类变换点的算法实现

    ARCore中Pose类变换点的算法实现,主要分为两步,分别是平移和旋转. 1. 旋转向量:通过四元数计算旋转后的向量 参数列表:q表示四元数, v是长度为4的float数组,表示待旋转的向量,   ...

  2. ARCore中根据屏幕坐标计算射线的算法

    ARCore中提供了根据屏幕坐标.视口大小及view. project矩阵计算从屏幕坐标发射一条射线的方法,此方法用于3D拾取. class Ray { public final Vector3f o ...

  3. eigen 中四元数、欧拉角、旋转矩阵、旋转向量

    一.旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1. ...

  4. Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

    四元数百度百科: 传送门 四元数官方文档: 传送门 欧拉旋转.四元数.矩阵旋转之间的差异: 传送门 四元数转换为欧拉角eulerAngles 官方文档: 传送门 欧拉角转换为四元数Euler 官方文档 ...

  5. 关于Unity四元数相乘先后顺序的问题

    在unity中四元数和向量相乘在unity中可以变换旋转.四元数和四元数相乘类似矩阵与矩阵相乘的效果. 矩阵相乘的顺序不可互换,只有特殊条件矩阵才可互换.四元数相乘类似,今天就因为这个问题掉进坑里了, ...

  6. 3D数学读书笔记——四元数

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25400659 什么是四元数 ...

  7. unity3d四元数和旋转矩阵

    http://blog.csdn.net/kfqcome/article/details/10729551 一 四元数 Quaternion中存放了x,y,z,w四个数据成员,可以用下标来进行访问,对 ...

  8. eigen 四元数进行坐标旋转

    (<视觉SLAM十四讲>第三讲习题7)设有小萝卜一号和二号在世界坐标系中.一号位姿q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1].二号位姿q2= ...

  9. U3D游戏开发基础

    向量: 1. 向量的长度,即向量的模.计算公式为向量各个分量的平方和,然后开平方. 在D3DX库中,方法为:FLOAT  D3DXVec3Length(CONST  D3DXVECTOR3 * pV) ...

随机推荐

  1. Java中的HashMap的一些尝试

    package yue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import jav ...

  2. numpy.where() 用法详解

    numpy.where (condition[, x, y]) numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出 ...

  3. php中wampserver多站点配置

    1.修改默认端口 : 2.添加多站点: 3.在文件的结尾添加一个站点配置: <VirtualHost *:8080> ServerAdmin webmaster@duoduo.com Do ...

  4. js添加锚点

    <div name="1F" id="1F"></div> <div class="top_img displayno& ...

  5. centos7.4 分区 格式化

    1. 查看磁盘 [root@yzb-centos72-3 ~]# fdisk -l Disk /dev/vda: 32.2 GB, 32212254720 bytes, 62914560 sector ...

  6. sql中的内联和外联(简单用法)

    有两张表:user和department User表: CREATE TABLE `user` (    `id` int(11) NOT NULL AUTO_INCREMENT,    `name` ...

  7. sklearn.model_selection.StratifiedShuffleSplit

    sklearn.model_selection.StratifiedShuffleSplit

  8. 初窥async,await

    首先是一道今日头条的面试题:(听说是今日头条的并且已经烂大街了) async function async1() { console.log( 'async1 start' ) await async ...

  9. h5 网络断网时,返回上一个页面 demo (与检测网络代码相结合,更直观看到结果)

    页面一: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...

  10. git创建分支并上传仓库

    1. 新建分支 xxx 2.  git pull (目录下 命令行将线上分支拉倒本地) 3. git checkout xxx (切换到到该分支 ) (可使用 git status 查看目前处于哪一个 ...