以角度为基础获取方向

4
我建立了一个小指南针项目,能够计算设备的方向。因此我得到了一个函数,返回当前方向在0°和360°之间的值。
我希望从像这样的数组中获取与当前方向匹配的值:(["北", "东北", "东", "东南", "南", "西南", "西", "西北"]) img (请记住: 北 = 0° / 359°)
但是我不知道如何获得这样的结果,以下是我目前拥有的所有内容,但似乎并没有起作用:
var directions = ["North", "North-East", "East", "South-East", "South", "South-West", "West", "North-West"]

function getDirection(heading) {
   var index = Math.round((heading/8)/5,625)
   return directions[index]
}

非常感谢任何帮助,提前致谢。


Math.round((heading/8)/5,625) 没有意义。 - epascarello
返回一个介于0°和360°之间的值,就像我之前提到的一样 :9 @dfsq - user9225081
所以 heading 是一个介于0和360之间的值? - putvande
我没时间运行测试,但我认为它只是var index = Math.floor((heading / 22.5) + 0.5) % 16 - epascarello
1
@JaneDeverly 哎呀,我想的是 ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"] 所以应该是8而不是16。 - epascarello
显示剩余2条评论
1个回答

15

这个解决方案应该考虑到所有可能的情况:

var index = Math.round(((angle %= 360) < 0 ? angle + 360 : angle) / 45) % 8;

function getDirection(angle) {
    var directions = ['North', 'North-East', 'East', 'South-East', 'South', 'South-West', 'West', 'North-West'];
    var index = Math.round(((angle %= 360) < 0 ? angle + 360 : angle) / 45) % 8;
    return directions[index];
}

console.log( getDirection(0) );
console.log( getDirection(45) );
console.log( getDirection(180) );
console.log( getDirection(99) );
console.log( getDirection(275) );
console.log( getDirection(-120) );
console.log( getDirection(587) );


不错的解决方案,但请将方向编辑为 ["北","西北","西","西南","南","东南","东","东北"]。这正是我要找的解决方案。 - user9225081
@JaneDeverly 好的,谢谢。我刚刚从你的问题中复制了指示 :) 现在已经修复了。 - VisioN
1
这个方法不会返回反转的值吗?例如对于角度90,它应该返回东方,但函数却说西方。 - Aayush Mall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接