我有一个函数返回-180到180的角度,我需要它是0到360.转换角度的公式是什么?
这就是我想要的:
0/360 270 90 180
这就是我所拥有的:
-90 -180/180 0 90
任何帮助都非常感谢,在html / javascript游戏上工作。
答案 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建议的代码
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;