在-180-180之间转换为0-360

时间:2017-07-26 03:30:08

标签: javascript math

我有一个函数返回-180到180的角度,我需要它是0到360.转换角度的公式是什么?

这就是我想要的:

   0/360

270      90

    180

这就是我所拥有的:

        -90

-180/180        0

         90

任何帮助都非常感谢,在html / javascript游戏上工作。

2 个答案:

答案 0 :(得分:2)

在保留等效角度的同时,可以通过多种方式完成此操作,并对值进行某些假设。

如果您确定这些值实际上在[-180,180]范围内,那么您可以使用以下内容:

var x = Math.random()*360-180;  // Generate random angle in range [-180, 180)
var y = x < 0 ? x+360 : x;      // Normalize to be in the range [0, 360)

如果您经常这样做,分支操作可能会导致行为不佳(尽管可能不是在Javascript中......您需要对其进行分析)。因此,如果没有分支操作,有时候这样做会更好。您可以使用模数(%)运算符执行此操作。

var x = Math.random()*360-180;  // Generate random angle in range [-180, 180)
var y = (x + 360) % 360;        // Normalize to be in the range [0, 360)

如果你不能保证原始值在[-180,180]范围内,你可以基本上除去转数。这看起来像

var x = getAngle();   // Some angle, potentially outside [-180, 180)
var y = x - 360 * Math.floor(x/360);  // Normalizes to be in range [0, 360)

由于表示浮点数的方式,需要注意x的大绝对值(据我所知,这是Javascript使用的,即使整数值也能正常工作)

编辑:我刚刚注意到你正在改变你认为0角度的位置(上方而不是右侧)。在这种情况下,您还需要添加90度以将0旋转到正确的位置。在这种情况下,第一个代码段变为:

var x = Math.random()*360-180;  // Generate random angle in range [-180, 180)
var y = x < -90 ? x+450 : x+90;    // Normalize to be in the range [0, 360)

下一个就像Amadan所说的那样。

var x = Math.random()*360-180;  // Generate random angle in range [-180, 180)
var y = (x + 450) % 360;        // Normalize to be in the range [0, 360)

,最后一个成为

var x = getAngle();   // Some angle, potentially outside [-180, 180)
var y = (x+90) - 360 * Math.floor((x+90)/360);  // Normalizes to be in range [0, 360)

答案 1 :(得分:0)

以下是@Amadan建议的代码

&#13;
&#13;
function convert(deg) {
  return ((deg + 450) % 360);
}

window.console.log(convert(-180));
window.console.log(convert(-90));
window.console.log(convert(0));
window.console.log(convert(90));
window.console.log(convert(180));
&#13;
&#13;
&#13;