famo.us四元数绕z轴旋转

时间:2015-01-17 19:11:36

标签: rotation quaternions famo.us

据我所知,四元数是一组四个值(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度?  文档仍然完全没用..

3 个答案:

答案 0 :(得分: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();

从Math Class

中记住的东西

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

摘要:

  • 我们圈子的一个等级是= Math.PI / 180
  • 你的方向角是= Math.PI / 180 *度

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试这种转换 - Transform.rotateZ(角度);

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