来自 6 个向量的四元数(将一个坐标系旋转到另一个坐标系)

Quaternion from 6 vectors (rotating one coordinate system into another)

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

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

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

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

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

q_relative = q1.inverted() * q2;