我需要将流四元数数据偏移一定的量。要做到这一点,我打算得到2之间的差异,然后第一个抵消第一个。找到两个四元数之间的旋转差异来校准两个坐标系
我无法找到2
Using this converter之间的差异。
我运行这段代码:
public void convertQuat180()
{
Quaternion q = new Quaternion(0.65328f, 0.2706f, 0.65328f, -0.2706f); //45,180,0
Quaternion q180 = new Quaternion(0.70711f, 0, 0.70711f, 0); // 0,90,0
Quaternion result = q180 * Quaternion.Inverse(q);
Console.WriteLine(result);
}
我希望result
是:
(euler) diff = 45, 90 , 0
而是我得到:
135,-180,0
我要去哪里错了吗?
我不确定使用欧拉角来想象这是否合理。差异旋转最有可能不具有两个源旋转的差异的角度。无论如何,用上面的公式,你会得到一个旋转,例如'result * q = q180'。这不是你想要的吗? –
好的,也许我应该坚持quats测试。我对他们来说是新的,想象欧盟的时候更容易!上述代码是否有效找到差异?然后,我会如何将这个差异应用于原始的四元组? – anti
欧拉角的问题是轴不能彼此独立。坚持四元数或旋转矩阵似乎是这种情况下更好的选择。你用简单的乘法来更新由四元数表示的旋转(参见我的第一条评论)。但是,当然,这会让你回到起点。 –