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

San*_*ndy -2 javascript math

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

这是我想要的:

   0/360

270 90

    180

这是我所拥有的:

        -90

-180/180 0

         90

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

and*_*and 5

有多种方法可以在保留等效角度的情况下完成此操作,并对值进行某些假设。

如果您确定这些值实际上在 [-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)
Run Code Online (Sandbox Code Playgroud)

如果您经常这样做,分支操作可能会导致不良行为(尽管可能不在 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)
Run Code Online (Sandbox Code Playgroud)

如果您不能保证原始值在 [-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)
Run Code Online (Sandbox Code Playgroud)

由于浮点数的表示方式,需要注意 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)
Run Code Online (Sandbox Code Playgroud)

下一个变成了 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)
Run Code Online (Sandbox Code Playgroud)

最后一个变成

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)
Run Code Online (Sandbox Code Playgroud)