ste*_*ory 69
编辑:
由于每22.5度有一个角度变化,方向应在11.25度后交换手.
因此:
349-360//0-11 = N
12-33 = NNE
34-56 = NE
Run Code Online (Sandbox Code Playgroud)
使用327-348(整个NNW谱)中的值未能产生eudoxos回答的结果.在给它一些想法之后我找不到他的逻辑中的缺陷,所以我重写了我自己的..
def degToCompass(num):
val=int((num/22.5)+.5)
arr=["N","NNE","NE","ENE","E","ESE", "SE", "SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"]
print arr[(val % 16)]
>>> degToCompass(0)
N
>>> degToCompass(180)
S
>>> degToCompass(720)
N
>>> degToCompass(11)
N
>>> 12
12
>>> degToCompass(12)
NNE
>>> degToCompass(33)
NNE
>>> degToCompass(34)
NE
Run Code Online (Sandbox Code Playgroud)
脚步 :
Mat*_*ear 27
这是steve-gregory的答案的javascript实现,对我有用.
function degToCompass(num) {
var val = Math.floor((num / 22.5) + 0.5);
var arr = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"];
return arr[(val % 16)];
}
Run Code Online (Sandbox Code Playgroud)
请参阅他的答案以解释逻辑.
eud*_*xos 11
注意舍入,349 ... 11之间的角度应为"N",因此首先添加半扇区(+(360/16)/ 2),然后处理溢出超过360%360,然后除以360/16:
["N","NNW",...,"NNE"][((d+(360/16)/2)%360)/(360/16)]
Run Code Online (Sandbox Code Playgroud)
这个 JavaScript 将适用于任何只需要 8 个基本方向并想要相应箭头的人。
function getCardinalDirection(angle) {
const directions = ['? N', '? NE', '? E', '? SE', '? S', '? SW', '? W', '? NW'];
return directions[Math.round(angle / 45) % 8];
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我相信更容易:
DirTable = ["N","NNE","NE","ENE","E","ESE", "SE","SSE","S","SSW","SW","WSW", "W","WNW","NW","NNW",**"N"**];
wind_direction= DirTable[Math.floor((d+11.25)/22.5)];
Run Code Online (Sandbox Code Playgroud)
小智 5
我检查了一下,它的效果很好,看起来很准确。资料来源:艾德里安·史蒂文斯(Adrian Stevens)的http://www.themethodology.net/2013/12/how-to-convert-degrees-to-cardinal.html
public static string DegreesToCardinal(double degrees)
{
string[] caridnals = { "N", "NE", "E", "SE", "S", "SW", "W", "NW", "N" };
return caridnals[(int)Math.Round(((double)degrees % 360) / 45)];
}
public static string DegreesToCardinalDetailed(double degrees)
{
degrees *= 10;
string[] caridnals = { "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N" };
return caridnals[(int)Math.Round(((double)degrees % 3600) / 225)];
}
Run Code Online (Sandbox Code Playgroud)