使用atan2进行角度动画

时间:2015-04-29 09:05:39

标签: javascript math

var diffx = (this.destination.x - pos.x), px = diffx / dist;
var diffy = (this.destination.y - pos.y), py = diffy / dist;
var angle = Math.atan2(diffy, diffx) - rot.z;

rot.set(0, 0, rot.z + angle / 24);

一个对象指向我的鼠标光标。我使用上面的代码来计算弧度的角度和#34; animate"几帧的角度。但是,当angle变量从正变为负时(在PI弧度处),它会顺时针方向一直转到新的光标位置(如红色所示)。但是,我想要的路径是直接进入新的角度(绿色箭头)。

enter image description here

编辑:

这是我想出来的,似乎有效。我可以改进吗?

            if(atan - this.lastAtan < -Math.PI)
                atan += Math.PI * 2;
            else if(atan - this.lastAtan > Math.PI)
                atan -= Math.PI * 2;
            this.lastAtan = atan;

            var zrot = rot.z + (atan * 12 * Game.dt);
            rot.set(0, 0, zrot % (Math.PI * 2));

1 个答案:

答案 0 :(得分:3)

您必须考虑到atan2的输出仅在-pi到+ pi的范围内。如果atan2的输出与您之前的角度之间的差异大于pi,那么您知道发生了一些环绕,并且您必须通过添加/减去2 * pi来纠正它。