【问题标题】:How to move an angle variable towards a target angle in the shortest way如何以最短的方式将角度变量移向目标角度
【发布时间】:2012-06-19 23:40:56
【问题描述】:

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

角度变量应始终向目标角度变量移动。

问题是,它不会以最短的方式发生。当 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);

【问题讨论】:

    标签: javascript angle degrees


    【解决方案1】:

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

    所以你的例子:

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

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

    注意:一定要对差值取绝对值

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2017-10-08
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2014-05-13
    相关资源
    最近更新 更多