Rebol3 Code Examplex
Angles (geometric), normalization and conversion
Normalize angles and convert between units or representations.
Rebol [
title: "Rosetta code: Angles (geometric), normalization and conversion"
file: %"Angles_(geometric),_normalization_and_conversion.r3"
url: https://rosettacode.org/wiki/Angles_%28geometric%29%2C_normalization_and_conversion
]
convert-angle: function/with [
"Convert a numeric angle value from one unit to another."
value [number!] "The angle value to convert"
src [any-word!] "Source unit: 'degrees, 'gradians, 'mils, or 'radians"
tgt [any-word!] "Target unit: 'degrees, 'gradians, 'mils, or 'radians"
][
(remainder (value * turns/:src) 1) / turns/:tgt
][
turns: compose [
degrees: (1 / 360)
gradians: (1 / 400)
mils: (1 / 6400)
radians: (0.5 / pi)
]
]
tests: reduce [-2 -1 0 1 2 (2 * pi) 16 57.2957795 359 399 6399 1000000]
units: [degrees gradians mils radians]
print " angle unit degrees gradians mils radians"
foreach value tests [
foreach unit units [
prin format [-9 SP 10][value unit]
foreach tgt units [
prin format [" " -9] convert-angle value unit tgt
]
print ""
]
print ""
]Output:
angle unit degrees gradians mils radians
-2 degrees -2.0 -2.222222 -35.55555 -0.034906
-2 gradians -1.8 -2.0 -32.0 -0.031415
-2 mils -0.1125 -0.125 -2.0 -0.001963
-2 radians -114.5915 -127.3239 -2037.183 -2.0
-1 degrees -1.0 -1.111111 -17.77777 -0.017453
-1 gradians -0.9 -1.0 -16.0 -0.015707
-1 mils -0.05625 -0.0625 -1.0 -0.000981
-1 radians -57.29577 -63.66197 -1018.591 -1.0
0 degrees 0.0 0.0 0.0 0.0
0 gradians 0.0 0.0 0.0 0.0
0 mils 0.0 0.0 0.0 0.0
0 radians 0.0 0.0 0.0 0.0
1 degrees 1.0 1.1111111 17.777777 0.0174532
1 gradians 0.9 1.0 16.0 0.0157079
1 mils 0.05625 0.0625 1.0 0.0009817
1 radians 57.295779 63.661977 1018.5916 1.0
2 degrees 2.0 2.2222222 35.555555 0.0349065
2 gradians 1.8 2.0 32.0 0.0314159
2 mils 0.1125 0.125 2.0 0.0019634
2 radians 114.59155 127.32395 2037.1832 2.0
6.2831853 degrees 6.2831853 6.9813170 111.70107 0.1096622
6.2831853 gradians 5.6548667 6.2831853 100.53096 0.0986960
6.2831853 mils 0.3534291 0.3926990 6.2831853 0.0061685
6.2831853 radians 0.0 0.0 0.0 0.0
16 degrees 16.0 17.777777 284.44444 0.2792526
16 gradians 14.4 16.0 256.0 0.2513274
16 mils 0.9 1.0 16.0 0.0157079
16 radians 196.73247 218.59163 3497.4661 3.4336293
57.295779 degrees 57.295779 63.661977 1018.5916 0.9999999
57.295779 gradians 51.566201 57.295779 916.73247 0.8999999
57.295779 mils 3.2228875 3.5809862 57.295779 0.0562499
57.295779 radians 42.806349 47.562610 761.00176 0.7471117
359 degrees 359.0 398.88888 6382.2222 6.2657320
359 gradians 323.1 359.0 5744.0 5.6391588
359 mils 20.19375 22.4375 359.0 0.3524474
359 radians 49.184845 54.649827 874.39724 0.8584374
399 degrees 39.0 43.333333 693.33333 0.6806784
399 gradians 359.1 399.0 6384.0 6.2674773
399 mils 22.44375 24.9375 399.0 0.3917173
399 radians 181.01602 201.12891 3218.0626 3.1593256
6399 degrees 279.00000 310.00000 4960.0000 4.8694686
6399 gradians 359.1 399.0 6384.0 6.2674773
6399 mils 359.94375 399.9375 6399.0 6.2822035
6399 radians 155.69310 172.99233 2767.8774 2.7173572
1000000 degrees 280.00000 311.11111 4977.7777 4.8869219
1000000 gradians 0.0 0.0 0.0 0.0
1000000 mils 90.0 100.0 1600.0 1.5707963
1000000 radians 339.51308 377.23675 6035.7881 5.9256211