我有一个函数返回一个从 -180 到 180 的角度,我需要它是 0 到 360。转换角度的公式是什么?
这是我想要的:
0/360 270 90 180
这是我所拥有的:
-90 -180/180 0 90
非常感谢任何帮助,在 html/javascript 游戏中工作。
有多种方法可以在保留等效角度的情况下完成此操作,并对值进行某些假设。
如果您确定这些值实际上在 [-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)
归档时间: |
|
查看次数: |
6864 次 |
最近记录: |