有没有人在Objective C中有一些示例代码,其中风度(即180转成S(南方))转换为基本风向(N,NNE,SSE,SE等)?
答案 0 :(得分:17)
怎么样?
- (NSString *)windDirectionFromDegrees:(float)degrees
{
static NSArray *directions;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Initialize array on first call.
directions = @[@"N", @"NNE", @"NE", @"ENE", @"E", @"ESE", @"SE", @"SSE",
@"S", @"SSW", @"SW", @"WSW", @"W", @"WNW", @"NW", @"NNW"];
});
int i = (degrees + 11.25)/22.5;
return directions[i % 16];
}
(我假设degrees
不是否定的。)
答案 1 :(得分:2)
以下是一个例子:
- (NSString*)windDirectionFromDegrees:(float)degrees {
NSString *hour1WindDirection;
if (348.75 <= Degrees && Degrees <= 360) {
hour1WindDirection = @"N";
} else if (0 <= Degrees && Degrees <= 11.25) {
hour1WindDirection = @"N";
} else if (11.25 < Degrees && Degrees <= 33.75) {
hour1WindDirection = @"NNE";
} else if (33.75 < Degree && Degrees <= 56.25) {
hour1WindDirection = @"NE";
} else if (56.25 < Degrees && Degrees <= 78.75) {
hour1WindDirection = @"ENE";
} else if (78.75 < Degrees && Degrees <= 101.25) {
hour1WindDirection = @"E";
} else if (101.25 < Degrees && Degrees <= 123.75) {
hour1WindDirection = @"ESE";
} else if (123.75 < Degrees && Degrees <= 146.25) {
hour1WindDirection = @"SE";
} else if (146.25 < Degrees && Degrees <= 168.75) {
hour1WindDirection = @"SSE";
} else if (168.75 < Degrees && Degrees <= 191.25) {
hour1WindDirection = @"S";
} else if (191.25 < Degrees && Degrees <= 213.75) {
hour1WindDirection = @"SSW";
} else if (213.75 < Degrees && Degrees <= 236.25) {
hour1WindDirection = @"SW";
} else if (236.25 < Degrees && Degrees <= 258.75) {
hour1WindDirection = @"WSW";
} else if (258.75 < Degrees && Degrees <= 281.25) {
hour1WindDirection = @"W";
} else if (281.25 < Degrees && Degrees <= 303.75) {
hour1WindDirection = @"WNW";
} else if (303.75 < Degrees && Degrees <= 326.25) {
hour1WindDirection = @"NW";
} else if (326.25 < Degrees && Degrees < 348.75) {
hour1WindDirection = @"NNW";
} else {
hour1WindDirection = nil;
}
return hour1WindDirection;
}
并通过此方法输入:
NSString *hour1WindDirection = [self windDirectionFromDegrees:hour1WindD]; //hour1WindD is a integer!
答案 2 :(得分:2)
我会这样做:
static NSString *windDirectionForDegrees(double degrees) {
static NSString *const Directions[] = {
@"N", @"NNE", @"NE", @"ENE", @"E", @"ESE", @"SE", @"SSE",
@"S", @"SSW", @"SW", @"WSW", @"W", @"WNW", @"NW", @"NNW"
};
static const int DirectionsCount = sizeof Directions / sizeof *Directions;
int wind = remainder(round((degrees / 360) * DirectionsCount), DirectionsCount);
if (wind < 0) wind += DirectionsCount;
return Directions[wind];
}
如果您决定只需要principal winds(S,NE,E,SE,S,SW,W和NW),则可以删除三个字母的方向,而无需更改功能的任何其他部分
同样,如果你决定要all 32 winds,你可以插入四分之一风(NbE,NEbE等)而不改变函数的任何其他部分。
答案 3 :(得分:1)
Swift 4
更新到Martin R的回答:
func windDirectionFromDegrees(degrees : Float) -> String {
let directions = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"]
let i: Int = Int((degrees + 11.25)/22.5)
return directions[i % 16]
}
答案 4 :(得分:0)
以下是Swift 4的示例
if 348.75 <= degrees, degrees <= 360 {
windDirection = "N"
} else if 0 <= degrees,degrees <= 11.25 {
windDirection = "N"
} else if 11.25 < degrees, degrees <= 33.75 {
windDirection = "NNE"
} else if 33.75 < degrees, degrees <= 56.25 {
windDirection = "NE"
} else if 56.25 < degrees, degrees <= 78.75 {
windDirection = "ENE"
} else if 78.75 < degrees, degrees <= 101.25 {
windDirection = "E"
} else if 101.25 < degrees, degrees <= 123.75 {
windDirection = "ESE"
} else if 123.75 < degrees, degrees <= 146.25 {
windDirection = "SE"
} else if 146.25 < degrees, degrees <= 168.75 {
windDirection = "SSE"
} else if 168.75 < degrees, degrees <= 191.25 {
windDirection = "S"
} else if 191.25 < degrees, degrees <= 213.75 {
windDirection = "SSW"
} else if 213.75 < degrees, degrees <= 236.25 {
windDirection = "SW"
} else if 236.25 < degrees, degrees <= 258.75 {
windDirection = "WSW"
} else if 258.75 < degrees, degrees <= 281.25 {
windDirection = "W"
} else if 281.25 < degrees, degrees <= 303.75 {
windDirection = "WNW"
} else if 303.75 < degrees, degrees <= 326.25 {
windDirection = "NW"
} else if 326.25 < degrees, degrees < 348.75 {
windDirection = "NNW"
}