63 lines
1.5 KiB
Text
63 lines
1.5 KiB
Text
local fmt = require "fmt"
|
|
|
|
---'cpx' returns integer index from 1 to 32 corresponding to compass point.
|
|
-- Input heading h is in degrees.
|
|
local function cpx(h)
|
|
local x = math.floor(h /11.25 + 0.5) % 32
|
|
if x < 0 then x += 32 end
|
|
return x + 1
|
|
end
|
|
|
|
-- Printable compass points.
|
|
local compass_point = {
|
|
"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"
|
|
}
|
|
|
|
-- Function required by task.
|
|
local function degrees_to_compass_point(h) return compass_point[cpx(h)] end
|
|
local r = {
|
|
0.0, 16.87, 16.88, 33.75, 50.62, 50.63, 67.5,
|
|
84.37, 84.38, 101.25, 118.12, 118.13, 135.0, 151.87, 151.88, 168.75,
|
|
185.62, 185.63, 202.5, 219.37, 219.38, 236.25, 253.12, 253.13, 270.0,
|
|
286.87, 286.88, 303.75, 320.62, 320.63, 337.5, 354.37, 354.38
|
|
}
|
|
|
|
print("Index Compass point Degree")
|
|
local i = 0
|
|
for r as h do
|
|
local index = i % 32 + 1
|
|
local d = degrees_to_compass_point(h)
|
|
fmt.print("%4d %-19s %7.2f°", index, d, h)
|
|
i += 1
|
|
end
|