我看了三个单独的公式,虽然它们大多相同,但我想知道为什么他们的标志不同。为了说明,这里是公式:
通用代码
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);
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;
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;
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对应物中,但我不明白标志的差异。
答案 0 :(得分:0)
很可能他们都是"对",但只有陈述" Euler角度"有几个模棱两可的来源。和/或"偏航俯仰滚动"。这可能会导致您看到的符号差异。特别是需要指定三个旋转中每个旋转的轴。
从欧拉角到旋转矩阵(如果你喜欢那些)我发现G. Slabaugh Computing Euler angles from a rotation matrix的论文很有用而且时间不长。你仍然需要convert from rotation matrix to quaternion,但这已经很好地定义了四元数的符号。
除非你想深入研究数学,否则你最好坚持使用一个软件包所使用的定义,该软件包可以在其首选的欧拉角和四元数之间来回转换。