在Javascript中计算Radians的正确方法?

时间:2014-12-08 00:41:27

标签: javascript jquery math

我有这个小提琴http://jsfiddle.net/pp7oby62/。这个小提琴包括一个桨式游戏,在80x10传感器网格上的桨上跨越障碍物。函数notify_player有两个参数,它们给我岩石和桨的位置。我的代码如下所示:

defender.start(

function notify_player(rocks, paddle_y) {
var rocks_x = Math.max(rocks);
var rocks_y = Math.min(rocks);
var paddle_x = Math.max(paddle_y);
var paddle_yp = Math.min(paddle_y);
var deltaY = rocks_y - paddle_yp;
var deltaX = rocks_x - paddle_x;
var angleInRadians = Math.atan2(deltaY, deltaX);
var angleRound=Math.round(angleInRadians);
// random plan
var moves = [];
for (var i = 0; i < 22; i++) {
    // -1, 0, 1 to move the fiddle up and down on the grid
    //moves.push( Math.floor(Math.random()*3) - 1 );
    if (angleInRadians >0) moves.push(-1);
    else if (angleInRadians < 0) moves.push(0, 1, -1);
}
     return moves;
}
);

移动阵列控制球拍上下移动。如您所见,我使用从两个参数获得的信息以弧度计算角度。但是当我运行它时,当我给出条件循环表明角度> 0或<0时,对桨的运动没有影响。但是假设我说:

if(angleInRadians!==0)

桨叶移动。 怎么可能这样呢?

1 个答案:

答案 0 :(得分:2)

  当我给出条件循环表明角度> 0或<0时,对桨的移动没有​​影响。

这可能只是当anleInRadians为零时 - 你在那里有一个盲点。

  

但是假设我说:if(angleInRadians!==0)划桨移动。怎么可能这样呢?

变量angleInRadians包含值NaN。它既不小也不大于零,因为它不是一个数字 - 但绝对不是零。是的,NaN的平等关系有点奇怪(它甚至不等于它自己)。

你在这里获得NaN的原因是你正在进行无效的数学运算。 rocks是一个对象数组(您确实应该记录并检查它),您无法在其上调用Math.min.max

顺便说一句,在单个值上调用minmax甚至没有意义。而且,您不会通过致电paddle_x来获得Math.max(paddle_y)职位。