21 lines
1005 B
Zig
21 lines
1005 B
Zig
/// Degrees is not constrained to the range 0 to 360
|
|
fn degreesToCompassPoint(degrees: f32) []const u8 {
|
|
var d = degrees + comptime (11.25 / 2.0);
|
|
while (d < 0) d += 360;
|
|
while (d >= 360) d -= 360;
|
|
const index: usize = @intFromFloat(@divFloor(d, 11.25));
|
|
|
|
const points: [32][]const u8 = comptime .{
|
|
"North", "North by east", "North-northeast", "Northeast by north",
|
|
"Northeast", "Northeast by east", "East-northeast", "East by north",
|
|
"East", "East by south", "East-southeast", "Southeast by east",
|
|
"Southeast", "Southeast by south", "South-southeast", "South by east",
|
|
"South", "South by west", "South-southwest", "Southwest by south",
|
|
"Southwest", "Southwest by west", "West-southwest", "West by south",
|
|
"West", "West by north", "West-northwest", "Northwest by west",
|
|
"Northwest", "Northwest by north", "North-northwest", "North by west",
|
|
};
|
|
|
|
return points[index];
|
|
}
|