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弧度处),它会顺时针方向一直转到新的光标位置(如红色所示)。但是,我想要的路径是直接进入新的角度(绿色箭头)。
编辑:
这是我想出来的,似乎有效。我可以改进吗?
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));
答案 0 :(得分:3)
您必须考虑到atan2的输出仅在-pi到+ pi的范围内。如果atan2的输出与您之前的角度之间的差异大于pi,那么您知道发生了一些环绕,并且您必须通过添加/减去2 * pi来纠正它。