Angles (geometric), normalization and conversion: Difference between revisions

→‎{{header|Lua}}: added Lua solution
(Added Common Lisp)
(→‎{{header|Lua}}: added Lua solution)
Line 1,231:
1000000 radians 339.5130823 377.2367581 6035.7881302 5.9256211
</pre>
=={{header|Lua}}==
<lang lua>range = { degrees=360, gradians=400, mils=6400, radians=2.0*math.pi }
function convert(value, fromunit, tounit)
return math.fmod(value * range[tounit] / range[fromunit], range[tounit])
end
 
testvalues = { -2, -1, 0, 1, 2, 6.2831853, 16, 57.2957795, 359, 399, 6399, 1000000 }
testunits = { "degrees", "gradians", "mils", "radians" }
print(string.format("%15s %8s = %15s %15s %15s %15s", "VALUE", "UNIT", "DEGREES", "GRADIANS", "MILS", "RADIANS"))
for _, value in ipairs(testvalues) do
for _, fromunit in ipairs(testunits) do
local d = convert(value, fromunit, "degrees")
local g = convert(value, fromunit, "gradians")
local m = convert(value, fromunit, "mils")
local r = convert(value, fromunit, "radians")
print(string.format("%15.7f %8s = %15.7f %15.7f %15.7f %15.7f", value, fromunit, d, g, m, r))
end
end</lang>
Optionally:
<lang lua>-- if you care..
assert(convert(-360,"degrees","degrees") == 0.0)
assert(convert(360,"degrees","degrees") == 0.0)
assert(convert(-400,"gradians","gradians") == 0.0)
assert(convert(400,"gradians","gradians") == 0.0)
assert(convert(-6400,"mils","mils") == 0.0)
assert(convert(6400,"mils","mils") == 0.0)
assert(convert(-2.0*math.pi,"radians","radians") == 0.0)
assert(convert(2.0*math.pi,"radians","radians") == 0.0)
 
-- if you must..
function d2d(n) return convert(n,"degrees","degrees") end
function d2g(n) return convert(n,"degrees","gradians") end
function d2m(n) return convert(n,"degrees","mils") end
function d2r(n) return convert(n,"degrees","radians") end
function g2d(n) return convert(n,"gradians","degrees") end
function g2g(n) return convert(n,"gradians","gradians") end
function g2m(n) return convert(n,"gradians","mils") end
function g2r(n) return convert(n,"gradians","radians") end
function m2d(n) return convert(n,"mils","degrees") end
function m2g(n) return convert(n,"mils","gradians") end
function m2m(n) return convert(n,"mils","mils") end
function m2r(n) return convert(n,"mils","radians") end
function r2d(n) return convert(n,"radians","degrees") end
function r2g(n) return convert(n,"radians","gradians") end
function r2m(n) return convert(n,"radians","mils") end
function r2r(n) return convert(n,"radians","radians") end</lang>
{{out}}
<pre> VALUE UNIT = DEGREES GRADIANS MILS RADIANS
-2.0000000 degrees = -2.0000000 -2.2222222 -35.5555556 -0.0349066
-2.0000000 gradians = -1.8000000 -2.0000000 -32.0000000 -0.0314159
-2.0000000 mils = -0.1125000 -0.1250000 -2.0000000 -0.0019635
-2.0000000 radians = -114.5915590 -127.3239545 -2037.1832716 -2.0000000
-1.0000000 degrees = -1.0000000 -1.1111111 -17.7777778 -0.0174533
-1.0000000 gradians = -0.9000000 -1.0000000 -16.0000000 -0.0157080
-1.0000000 mils = -0.0562500 -0.0625000 -1.0000000 -0.0009817
-1.0000000 radians = -57.2957795 -63.6619772 -1018.5916358 -1.0000000
0.0000000 degrees = 0.0000000 0.0000000 0.0000000 0.0000000
0.0000000 gradians = 0.0000000 0.0000000 0.0000000 0.0000000
0.0000000 mils = 0.0000000 0.0000000 0.0000000 0.0000000
0.0000000 radians = 0.0000000 0.0000000 0.0000000 0.0000000
1.0000000 degrees = 1.0000000 1.1111111 17.7777778 0.0174533
1.0000000 gradians = 0.9000000 1.0000000 16.0000000 0.0157080
1.0000000 mils = 0.0562500 0.0625000 1.0000000 0.0009817
1.0000000 radians = 57.2957795 63.6619772 1018.5916358 1.0000000
2.0000000 degrees = 2.0000000 2.2222222 35.5555556 0.0349066
2.0000000 gradians = 1.8000000 2.0000000 32.0000000 0.0314159
2.0000000 mils = 0.1125000 0.1250000 2.0000000 0.0019635
2.0000000 radians = 114.5915590 127.3239545 2037.1832716 2.0000000
6.2831853 degrees = 6.2831853 6.9813170 111.7010720 0.1096623
6.2831853 gradians = 5.6548668 6.2831853 100.5309648 0.0986960
6.2831853 mils = 0.3534292 0.3926991 6.2831853 0.0061685
6.2831853 radians = 359.9999996 399.9999995 6399.9999927 6.2831853
16.0000000 degrees = 16.0000000 17.7777778 284.4444444 0.2792527
16.0000000 gradians = 14.4000000 16.0000000 256.0000000 0.2513274
16.0000000 mils = 0.9000000 1.0000000 16.0000000 0.0157080
16.0000000 radians = 196.7324722 218.5916358 3497.4661726 3.4336294
57.2957795 degrees = 57.2957795 63.6619772 1018.5916356 1.0000000
57.2957795 gradians = 51.5662016 57.2957795 916.7324720 0.9000000
57.2957795 mils = 3.2228876 3.5809862 57.2957795 0.0562500
57.2957795 radians = 42.8063493 47.5626103 761.0017647 0.7471117
359.0000000 degrees = 359.0000000 398.8888889 6382.2222222 6.2657320
359.0000000 gradians = 323.1000000 359.0000000 5744.0000000 5.6391588
359.0000000 mils = 20.1937500 22.4375000 359.0000000 0.3524474
359.0000000 radians = 49.1848452 54.6498280 874.3972479 0.8584375
399.0000000 degrees = 39.0000000 43.3333333 693.3333333 0.6806784
399.0000000 gradians = 359.1000000 399.0000000 6384.0000000 6.2674773
399.0000000 mils = 22.4437500 24.9375000 399.0000000 0.3917173
399.0000000 radians = 181.0160257 201.1289175 3218.0626795 3.1593256
6399.0000000 degrees = 279.0000000 310.0000000 4960.0000000 4.8694686
6399.0000000 gradians = 359.1000000 399.0000000 6384.0000000 6.2674773
6399.0000000 mils = 359.9437500 399.9375000 6399.0000000 6.2822036
6399.0000000 radians = 155.6931042 172.9923380 2767.8774082 2.7173573
1000000.0000000 degrees = 280.0000000 311.1111111 4977.7777778 4.8869219
1000000.0000000 gradians = 0.0000000 0.0000000 0.0000000 0.0000000
1000000.0000000 mils = 90.0000000 100.0000000 1600.0000000 1.5707963
1000000.0000000 radians = 339.5130823 377.2367581 6035.7881302 5.9256211</pre>
 
=={{header|Perl}}==
Anonymous user