2016-04-22 49 views
1

我有2个任意坐标系的6个单位向量(代表X/Y/Z轴)。第二个坐标系的矢量值基于第一个系统。我需要将一个系统旋转到另一个系统并返回匹配的四元数。在C++中最合理的方法是什么?6个向量中的四元数(将一个坐标系转换为另一个)

在SO上有很多关于将y-up/z-up /左/右手系统转换为对方的文章,不幸的是我需要这是一个针对任何6个单位向量的通用解决方案。感谢您的任何见解。

+0

'什么是最合理的方式来做到这一点在c + +?'https://en.wikipedia.org/wiki/Euler_angles,显然 –

+0

@SeverinPappadeux不是一个选项,我需要一个四元数返回并与万向节锁在使用欧拉角之前。 – broozar

回答

2

3个正交矢量可能是旋转矩阵3x3。你可以建立2个矩阵,并找到相对旋转r_relative = r1.transpose()* r2;

使用任何测试库将矩阵转换为四元数。

或转换既旋转来四元数和

q_relative = q1.inverted()* Q2;

+0

谢谢!因为这是用于运动跟踪和骨骼取向的,我昨天发现了这篇论文,它基本上证实了你的建议,并且增加了将我当前的骨骼取向与层次结构之前的取向相关联的信息。 [链接](http://publicationslist.org/data/melslater/ref-266/p175-spanlang.pdf)3.1,第二栏 – broozar

相关问题