如何以最短的方式将角度变量移向目标角度

时间:2012-06-19 15:35:10

标签: javascript angle degrees

我的游戏单元有一个角度变量和一个targetAngle变量。这些变量范围从1到360度。

角度变量应始终朝targetAngle变量移动。

问题是,它不会以最短的方式发生。当targetAngle是350度,当前角度只有10度时,变量应该只移动20度而不是增加340度,就像我现在一样。

如何让角度变量以最短的方式移向targetAngle变量?

现场演示:http://jsfiddle.net/zNsbc/

var angle = 10;
var targetAngle = 350;

setInterval(function() {

    if ( angle > targetAngle ) {
        angle--;
    }
    else if ( angle < targetAngle ) {
        angle++;
    }    

    $("#angle").text(angle);

}, 10);

1 个答案:

答案 0 :(得分:1)

您应该意识到360与0相同,因此您可以将角度与targetAngle以及targetAngle + 360进行比较并将其移动到最接近的方向(对于接近0和0的角度,请考虑-360) targetAngle接近360)

所以你的例子:

angle:            10
targetAngle:      350 (diff 340)
targetAngle+360:  710 (diff 700)
targetAngle-360: - 10 (diff  20)

角度最接近targetAngle-360,所以你会递减它,而不是递增它

注意:确保取差值的绝对值

相关问题