famo.us四元数绕z轴旋转

famo.us quaternion rotation around z axis

据我所知,四元数是一组四个值 (W X Y Z),用于指定 3D 中的旋转 space。对于给定的轴 (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 度

是不是框架的bug?
我应该如何使用它来围绕 z 轴将其打开 90 度?
文档还是完全没用..

刚刚在一篇 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);

试试这个方法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();

数学中要记住的东西Class

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

总结:

  • 我们圆的一度是 = Math.PI/180
  • 你的方位角 = Math.PI/180 * 度数

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

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