ARCore中四元数的插值算法实现
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中四元数的插值算法实现的更多相关文章
- ARCore中Pose类变换点的算法实现
ARCore中Pose类变换点的算法实现,主要分为两步,分别是平移和旋转. 1. 旋转向量:通过四元数计算旋转后的向量 参数列表:q表示四元数, v是长度为4的float数组,表示待旋转的向量, ...
- ARCore中根据屏幕坐标计算射线的算法
ARCore中提供了根据屏幕坐标.视口大小及view. project矩阵计算从屏幕坐标发射一条射线的方法,此方法用于3D拾取. class Ray { public final Vector3f o ...
- eigen 中四元数、欧拉角、旋转矩阵、旋转向量
一.旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1. ...
- Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()
四元数百度百科: 传送门 四元数官方文档: 传送门 欧拉旋转.四元数.矩阵旋转之间的差异: 传送门 四元数转换为欧拉角eulerAngles 官方文档: 传送门 欧拉角转换为四元数Euler 官方文档 ...
- 关于Unity四元数相乘先后顺序的问题
在unity中四元数和向量相乘在unity中可以变换旋转.四元数和四元数相乘类似矩阵与矩阵相乘的效果. 矩阵相乘的顺序不可互换,只有特殊条件矩阵才可互换.四元数相乘类似,今天就因为这个问题掉进坑里了, ...
- 3D数学读书笔记——四元数
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25400659 什么是四元数 ...
- unity3d四元数和旋转矩阵
http://blog.csdn.net/kfqcome/article/details/10729551 一 四元数 Quaternion中存放了x,y,z,w四个数据成员,可以用下标来进行访问,对 ...
- eigen 四元数进行坐标旋转
(<视觉SLAM十四讲>第三讲习题7)设有小萝卜一号和二号在世界坐标系中.一号位姿q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1].二号位姿q2= ...
- U3D游戏开发基础
向量: 1. 向量的长度,即向量的模.计算公式为向量各个分量的平方和,然后开平方. 在D3DX库中,方法为:FLOAT D3DXVec3Length(CONST D3DXVECTOR3 * pV) ...
随机推荐
- swift3笔记
备注:这里只是个人的观点,有的地方也是copy,多多指教,个人笔记,有侵犯你们版权的地方还望海涵!!! 个人觉得swift和OC最大的区别就是增加了许多现代化的东西,java里面的闭包,private ...
- .net core 生成
查看发布命令:dotnet publish --help 1:进入项目根目录 2:dotnet publish 或者发布到指定路劲 dotnet publish .\web.meb.scpr ...
- Neo4j图数据库使用
最近在处理一些图的数据,主要是有向图,如果图的节点不是特别大可以直接加载到内存里来处理,但是当图的节点个数特别大时,内存就放不下了:我 们牵涉到的图的节点数最大可以达到数亿个节点,已经超出的机器内存的 ...
- 18-09-20 关于Xlrd和Xlwt的初步学习
#一关于利用xlrd 打开Excel 读取数据的简单介绍import xlrd """ #1 xlrd 基础的用法:读取,获取sheet,获取内容,行数,列数def re ...
- 新建虚拟机并与XShell连接(配置网卡)
新建虚拟机并与XShell连接 一.新建虚拟机 下一步 下一步 选择CentOS版本,我的CentOS镜像是6.5版本64位,所以我选择CentOS 6 64. 然后点击下一步 可以自行更改位置,然后 ...
- python rtree包查找三维空间下的最近设备
rtree模块有2个常用的类:rtree.index.Index和rtree.index.Property.其中rtree.index.Index用于进行数据操作,rtree.index.Proper ...
- Chromium Settings页面修改
/********************************************************************** * Chromium Settings页面修改 * 说明 ...
- 【python接口自动化-requests库】【一】requests库安装
1.概念 requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满 ...
- 【SpringBoot】整合Redis实战
========================9.SpringBoot2.x整合Redis实战 ================================ 1.分布式缓存Redis介绍 简介: ...
- terraform 配置github module source
terraform 支持多种module 的source 配置 以下是一个简单的使用github source的demo 测试项目 项目结构 ├── init.tpl ├── main.tf 代码 ...