【问题标题】:Quaternion from 6 vectors (rotating one coordinate system into another)来自 6 个向量的四元数(将一个坐标系旋转到另一个坐标系)
【发布时间】:2016-08-16 01:38:18
【问题描述】:

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

SO 上有许多帖子谈论将 y-up/z-up/left-/right-handed 系统相互转换,不幸的是,我需要这是任何 6 个单位向量的通用解决方案。感谢您提供任何见解。

【问题讨论】:

  • What would be the most reasonable way to do this in c++? en.wikipedia.org/wiki/Euler_angles,显然
  • @SeverinPappadeux 不是一个选项,我需要返回一个四元数并在使用欧拉角之前使用万向节锁定。

标签: c++ vector quaternions coordinate-systems


【解决方案1】:

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

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

或者将两个旋转都转换为四元数和

q_relative = q1.inverted() * q2;

【讨论】:

  • 谢谢!因为这是用于运动跟踪和骨骼方向的,所以我昨天找到了这篇论文,它基本上证实了你的建议,并添加了将我当前的骨骼方向与层次结构中之前的骨骼方向相关联的信息。 link 3.1 下,第二栏
猜你喜欢
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
相关资源
最近更新 更多