【问题标题】:Rotate Quaternion by an offset?将四元数旋转偏移量?
【发布时间】:2015-01-13 19:19:24
【问题描述】:

我正在尝试为四元数的旋转添加偏移量,根据Unity documentation,将两个四元数相乘与按顺序进行两个旋转相同。

这就是我现在正在尝试的:

如果偏移量四元数是 (0, 0, 0, 0) 乘以第一个四元数,则应该没有任何效果。然而,在我的测试中,将任何四元数乘以 (0, 0, 0, 0) 会得到 (0, 0, 0, 0),所以这不能正常工作。

    Quaternion q = new Quaternion (-0.7f, 0f, 0f, -0.7f);
    Quaternion rotationZero = new Quaternion (0f, 0f, 0f, 0f); // offset

    Quaternion result = q * rotationZero;

    print (result); // (0.0, 0.0, 0.0, 0.0)

【问题讨论】:

  • 其实乘以(1,0,0,0)是没有效果的。请注意,所有用于表示旋转的四元数的大小都应为 1(平方和 = 1)。您的 q 值也有一点偏差(幅度约为 0.99)。

标签: unity3d quaternions


【解决方案1】:

这里的问题不是 C# 或 Unity,您使用的值会导致输出值为 (0.0, 0.0, 0.0, 0.0)。它可以用数学来解释如下。

四元数的形式为

q = q0 + iq1 + jq2 + kq3r = r0 + ir1 + jr2 + kr3

四元数积的形式为

t= q×r = t0 + it1 + jt2 + kt3, 在哪里

t0 = (r0q0−r1q1−r2q2−r3q3) t1 = (r0q1+r1q0−r2q3+r3q2) t2 = (r0q2+r1q3+r2q0−r3q1) t3 = (r0q3−r1q2+r2q1+r3q0)

【讨论】:

    【解决方案2】:
    Quaternion q = new Quaternion (-0.7f, 0f, 0f, -0.7f);
    Quaternion rotationZero = Quaternion.identity; // offset
    
    Quaternion result = q * rotationZero;
    

    Quaternion.identity docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2011-10-08
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      相关资源
      最近更新 更多