【问题标题】:famo.us quaternion rotation around z axis著名的四元数绕 z 轴旋转
【发布时间】:2015-01-17 19:11:36
【问题描述】:

据我所知,四元数是一组四个值 (W X Y Z),用于指定 3D 空间中的旋转。对于给定的轴 (x y z) 和角度 (α),表示从原点 (0,0,0) 到 (x,y,z) 绕轴旋转的四元数。所以绕 z 轴 (0 0 1) 旋转 90 度应该是:

var quaternion = new Quaternion(Math.PI/2, 0, 0, 1);

但是 famo.us 把它转了大约 60 度...

我也尝试过var quaternion = new Quaternion(90, 0, 0, 1);,但在这种情况下,famo.us 会将其旋转约 5 度

这是框架的错误吗?
我应该如何使用它围绕 z 轴将其打开 90 度?
文档仍然完全没用..

【问题讨论】:

    标签: rotation quaternions famo.us


    【解决方案1】:

    试试这个方法Quaternion.makeFromAngleAndAxis(angle, v) 我发现这是使它更具可读性和可用性的最直接的方法。

    Example jsBin

    在哪里

    var degrees = 90;    
    var angle = Math.PI/180 * degrees;
    var v = new Vector(0, 0, 1);
    
    var quaternion = new Quaternion();
    quaternion.makeFromAngleAndAxis(angle, v);
    

    ...获取转换

    quaternion.getTransform();
    

    数学课要记住的东西

    一个圆有 360 度。每个度数由圆的单位周长 2 * PI * r 表示。我们假设我们的半径为 1。因此,将总周长除以 360,得到 1 度 2PI/360 或 PI/180。

    总结:

    • 我们圆的一度是 = Math.PI/180
    • 您的方向角为 = Math.PI/180 * 度

    【讨论】:

      【解决方案2】:

      刚刚在一篇 wiki 文章中找到答案:

      var angle = Math.PI/2;
      var axis = [0,0,1];
      
      var w = Math.cos(.5 * angle);
      var x = axis[0] * Math.sin(.5 * angle);
      var y = axis[1] * Math.sin(.5 * angle);
      var z = axis[2] * Math.sin(.5 * angle);
      var quaternion = new Quaternion(w, x, y, z);
      

      【讨论】:

        【解决方案3】:

        试试这个变换 - Transform.rotateZ(angle);

        参考-http://famo.us/docs/reference/pages/0.3/transforms.html

        【讨论】:

          猜你喜欢
          • 2011-04-10
          • 2011-08-22
          • 1970-01-01
          • 2021-07-12
          • 2022-10-25
          • 2019-09-18
          • 1970-01-01
          • 1970-01-01
          • 2018-03-26
          相关资源
          最近更新 更多