ARCore中四元数的插值算法实现

摘要:
3floatcosHalfTheta=a.x*b.x+a.y*b.y+a.z*b.z+a.w*b.w;0.0F){5b=新四元数(b);7b.x=-b.x;9b.z=-b.z;0.001D){18floatoneOverSinHalfTheta=1.0F/sinHalfTheta;

ARCore中四元数差值算法:

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

 1   public static Quaternion makeInterpolated(Quaternion a, Quaternion b, float t) {
 2         Quaternion out = new Quaternion();
 3         float cosHalfTheta = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
 4         if(cosHalfTheta < 0.0F) {
 5             b = new Quaternion(b);
 6             cosHalfTheta = -cosHalfTheta;
 7             b.x = -b.x;
 8             b.y = -b.y;
 9             b.z = -b.z;
10             b.w = -b.w;
11         }
12 
13         float halfTheta = (float)Math.acos((double)cosHalfTheta);
14         float sinHalfTheta = (float)Math.sqrt((double)(1.0F - cosHalfTheta * cosHalfTheta));
15         float ratioA;
16         float ratioB;
17         if((double)Math.abs(sinHalfTheta) > 0.001D) {
18             float oneOverSinHalfTheta = 1.0F / sinHalfTheta;
19             ratioA = (float)Math.sin((double)((1.0F - t) * halfTheta)) * oneOverSinHalfTheta;
20             ratioB = (float)Math.sin((double)(t * halfTheta)) * oneOverSinHalfTheta;
21         } else {
22             ratioA = 1.0F - t;
23             ratioB = t;
24         }
25 
26         out.x = ratioA * a.x + ratioB * b.x;
27         out.y = ratioA * a.y + ratioB * b.y;
28         out.z = ratioA * a.z + ratioB * b.z;
29         out.w = ratioA * a.w + ratioB * b.w;
30         out.normalizeInPlace();
31         return out;
32     }

免责声明:文章转载自《ARCore中四元数的插值算法实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[异常解决] ubuntu上安装JLink驱动遇到的坑及给后来者的建议MFC逆向-消息响应函数的定位下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

np.arrange()

返回值:一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是5,步长为1。 参数: 一个参数:参数值 = (数组的终点+默认的步长1),起点取默认值0,步长取默认值1。 import numpy as np a = np.arange(5) print(a)           结果:               二个参数:第一...

easyui扩展行默认展开 以及 去除滚动条

 问题背景: 在做打印页面的时候,要求有详细的默认展开显示。    遇到的问题: 1)在用扩展行的时候,grid的所有行都添加了展开收起的图标,(第二行没有明细)如下  2)默认展示有详细行的时候,内容被滚动条遮挡(影响打印)    3) 解决方法:在easyui扩展行的 onLoadSuccess 函数里进行处理  1 $list.datag...

WPF数据绑定(四)

1、DataTemplate 上一部分已经讲了itemsource绑定,功能虽然实现了但是还是有点土,内容太单一了,如果能够修改listbox的界面,让更多的元素展示出来就完美了。 DataTemplate就可以实现这个。 1 <TabItem Header="DataTemplate"> 2...

appscan 对api的手工检测

AppScan 在 API 安全测试中的实例介绍 在本项目中,API 遵循标准的的 REST 架构和背端服务器进行通信。针对 API 的功能测试由两部分组成:一部分是用一个 Web 的测试页面直接实现的,另一部分,由于 Web 页面的局限性(比如不能任意修改 HTTP header),所以是通过 Shell 脚本调用 curl 实现的。 并且这个 API...

pyqt5树状分隔画面

import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *class Example(QWidget): def __init__(self): super().__init__() self.init...

火柴棍等式

现手中有m(m<=24)个火柴棍,希望拼出A+B=C等式。等式中的A、B、C均为火柴棍拼出来的整数(若该数非0,则最高位不能为0)。 注意:1、加号与等号各自需要2根火柴棍; 2、如果A不等于B,则A+B=C与B+A=C视为不同的等式(三者均大于0); 3、所有根火柴棍必须全都用上。 #include<stdio.h> int fun(i...