将Euler转换为四元数符号

时间:2016-07-25 07:09:54

标签: math quaternions euler-angles

我看了三个单独的公式,虽然它们大多相同,但我想知道为什么他们的标志不同。为了说明,这里是公式:

通用代码

float xSin = Math::Sinr (x / 2);
float xCos = Math::cosr (x / 2);

float ySin = Math::Sinr (y / 2);
float yCos = Math::Cosr (y / 2);

float zSin = Math::Sinr (z / 2);
float zCos = Math::Cosr (z / 2);

Euclidean Space

X = xSin * yCos * zCos + xCos * ySin * zSin;
Y = xCos * ySin * zCos + xSin * yCos * zSin;
Z = xCos * yCos * zSin - xSin * ySin * zCos;
W = xCos * yCos * zCos - xSin * ySin * zSin;

Wikipedia

X = xSin * yCos * zCos - xCos * ySin * zSin;
Y = xCos * ySin * zCos + xSin * yCos * zSin;
Z = xCos * yCos * zSin - xSin * ySin * zCos;
W = xCos * yCos * zCos + xSin * ySin * zSin;

Microsoft XNA

X = xSin * yCos * zCos + xCos * ySin * zSin;
Y = xCos * ySin * zCos - xSin * yCos * zSin;
Z = xCos * yCos * zSin - xSin * ySin * zCos;
W = xCos * yCos * zCos + xSin * ySin * zSin;

您可以看到第一个+ + - -,第二个- + - +和第三个+ - - +。为此我已将偏航音高标准化并滚动到正确的XYZ对应物中,但我不明白标志的差异。

1 个答案:

答案 0 :(得分:0)

很可能他们都是"对",但只有陈述" Euler角度"有几个模棱两可的来源。和/或"偏航俯仰滚动"。这可能会导致您看到的符号差异。特别是需要指定三个旋转中每个旋转的轴。

从欧拉角到旋转矩阵(如果你喜欢那些)我发现G. Slabaugh Computing Euler angles from a rotation matrix的论文很有用而且时间不长。你仍然需要convert from rotation matrix to quaternion,但这已经很好地定义了四元数的符号。

除非你想深入研究数学,否则你最好坚持使用一个软件包所使用的定义,该软件包可以在其首选的欧拉角和四元数之间来回转换。