首页 > 解决方案 > 如何反转四元数的两个轴

问题描述

我必须从我正在使用的两个不同的 API 转换姿势(坐标 + 旋转四元数)。更具体地说,我得到对象相对于相机本地位置的坐标。

我的检测库(用于检测这些对象)具有相机的坐标系,Z 朝向相机的视线方向,X 位于相机的右侧,Y 位于相机下方(如果您从相机本身)。我将在这里使用 ACII Art 来说明我的意思:

Symbols:

+------+
|      | = camera from the back
+------+

+--+
|  +-+
|    |   = camera from the right side (imagine the front part as the lens)
|  +-+
+--+

Detection Coordinate System from the back of the camera

+--------> x
|
|      +------+
|      |      |
V y    +------+
Detection Coordinate System from the right side of the camera

+--------> z
|     +--+
|     |  +-+
|     |    |
V y   |  +-+
      +--+

然而,我使用对象姿势的库的 X 方向相同,但 Y 和 Z 都是倒置的。所以 Z 指向与相机的观察方向相反的方向,而 Y 指向正上方。更多 ASCII 草图:

Usage Coordinate System from the back of the camera

^ y    +------+
|      |      |
|      +------+
|
+--------> x
Usage Coordinate System from the right side of the camera

+--+
|  +-+         ^ y
|    |         |
|  +-+         |
+--+           |
    z <--------+

所以现在我在检测坐标系中获得对象姿势(包括旋转),但想在使用坐标系中使用它们。我知道我可以通过反转 y 和 z 的值来转换坐标,但是如何转换四元数以进行旋转?我尝试了一些组合,但似乎都没有。

标签: openglgraphicsarcorequaternions

解决方案


在这种情况下,您的基础更改只是轴的排列,因此要从一个转换为另一个,您只需在四元数的虚向量中复制相同的排列。

即,如果您的四元数是 (w,x,y,z) 并且基本排列是 (z,y,x),那么您的新四元数是 (w,z,y,x)。


推荐阅读