Math 将Euler转换为四元数符号

Math 将Euler转换为四元数符号,math,quaternions,euler-angles,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

我看了三个不同的公式,虽然它们基本相同,但我想知道为什么它们的符号不同。为了说明这一点,以下是公式:

通用代码

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);

您可以看到第一个有
+-
,第二个有
-+-+
,第三个有
+-+
。为此,我已将偏航俯仰和横摇规范化为其正确的XYZ对应项,但我不理解符号之间的差异。

很可能它们都是“正确的”,但在仅说明“欧拉角”和/或“偏航俯仰横摇”时存在多个歧义源。这可能会引起你所看到的符号的差异。特别是,需要指定三个旋转中每个旋转所围绕的轴

对于从欧拉角度到旋转矩阵(如果你喜欢的话),我发现这篇文章很有用,而且不太长。您仍然需要,但这是定义良好的四元数符号

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

它们很可能都是“正确的”,但在仅说明“欧拉角”和/或“偏航-俯仰-滚转”时,存在多个歧义源。这可能会引起你所看到的符号的差异。特别是,需要指定三个旋转中每个旋转所围绕的轴

对于从欧拉角度到旋转矩阵(如果你喜欢的话),我发现这篇文章很有用,而且不太长。您仍然需要,但这是定义良好的四元数符号


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

欧拉天使有12种表示形式,可能你的资料来源使用了不同的表示形式。欧拉天使有12种表示形式,可能你的资料来源使用了不同的表示形式
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;