|
| 1 | ++++ |
| 2 | +title = "Angles (geometric), normalization and conversion" |
| 3 | ++++ |
| 4 | + |
| 5 | +# Angles (geometric), normalization and conversion |
| 6 | + |
| 7 | +{{trans|Wren}} |
| 8 | + |
| 9 | +```zc |
| 10 | +import "std/math.zc" |
| 11 | +
|
| 12 | +fn d2d(d: f64) -> f64 { return Math::mod(d, 360.0); } |
| 13 | +fn g2g(g: f64) -> f64 { return Math::mod(g, 400.0); } |
| 14 | +fn m2m(m: f64) -> f64 { return Math::mod(m, 6400.0); } |
| 15 | +fn r2r(r: f64) -> f64 { return Math::mod(r, 2.0 * Math::PI()); } |
| 16 | +fn d2g(d: f64) -> f64 { return d2d(d) * 400.0 / 360.0; } |
| 17 | +fn d2m(d: f64) -> f64 { return d2d(d) * 6400.0 / 360.0; } |
| 18 | +fn d2r(d: f64) -> f64 { return d2d(d) * Math::PI() / 180.0; } |
| 19 | +fn g2d(g: f64) -> f64 { return g2g(g) * 360.0 / 400.0; } |
| 20 | +fn g2m(g: f64) -> f64 { return g2g(g) * 6400.0 / 400.0; } |
| 21 | +fn g2r(g: f64) -> f64 { return g2g(g) * Math::PI() / 200.0; } |
| 22 | +fn m2d(m: f64) -> f64 { return m2m(m) * 360.0 / 6400.0; } |
| 23 | +fn m2g(m: f64) -> f64 { return m2m(m) * 400.0 / 6400.0; } |
| 24 | +fn m2r(m: f64) -> f64 { return m2m(m) * Math::PI() / 3200.0; } |
| 25 | +fn r2d(r: f64) -> f64 { return r2r(r) * 180.0 / Math::PI(); } |
| 26 | +fn r2g(r: f64) -> f64 { return r2r(r) * 200.0 / Math::PI(); } |
| 27 | +fn r2m(r: f64) -> f64 { return r2r(r) * 3200 / Math::PI(); } |
| 28 | +
|
| 29 | +fn main() { |
| 30 | + let f1 = "%15s %15s %15s %15s %15s\n"; |
| 31 | + let f2 = "%15.7f %15.7f %15.7f %15.7f %15.7f\n"; |
| 32 | + let angles: f64[12] = [-2.0, -1.0, 0.0, 1.0, 2.0, 6.2831853, 16.0, 57.2957795, 359.0, 399.0, 6399.0, 1000000.0]; |
| 33 | +
|
| 34 | + printf(f1, "degrees", "norm degs", "gradians", "mils", "radians"); |
| 35 | + for a in angles { |
| 36 | + printf(f2, a, d2d(a), d2g(a), d2m(a), d2r(a)); |
| 37 | + } |
| 38 | + println ""; |
| 39 | +
|
| 40 | + printf(f1, "gradians", "norm grds", "degrees", "mils", "radians"); |
| 41 | + for a in angles { |
| 42 | + printf(f2, a, g2g(a), g2d(a), g2m(a), g2r(a)); |
| 43 | + } |
| 44 | + println ""; |
| 45 | +
|
| 46 | + printf(f1, "mils", "norm mils", "degrees", "gradians", "radians"); |
| 47 | + for a in angles { |
| 48 | + printf(f2, a, m2m(a), m2d(a), m2g(a), m2r(a)); |
| 49 | + } |
| 50 | + println ""; |
| 51 | +
|
| 52 | + printf(f1, "radians", "norm rads", "degrees", "gradians", "mils"); |
| 53 | + for a in angles { |
| 54 | + printf(f2, a, r2r(a), r2d(a), r2g(a), r2m(a)); |
| 55 | + } |
| 56 | +} |
| 57 | +``` |
| 58 | + |
| 59 | +**Output:** |
| 60 | + |
| 61 | +``` |
| 62 | +degrees norm degs gradians mils radians |
| 63 | + -2.0000000 -2.0000000 -2.2222222 -35.5555556 -0.0349066 |
| 64 | + -1.0000000 -1.0000000 -1.1111111 -17.7777778 -0.0174533 |
| 65 | + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 |
| 66 | + 1.0000000 1.0000000 1.1111111 17.7777778 0.0174533 |
| 67 | + 2.0000000 2.0000000 2.2222222 35.5555556 0.0349066 |
| 68 | + 6.2831853 6.2831853 6.9813170 111.7010720 0.1096623 |
| 69 | + 16.0000000 16.0000000 17.7777778 284.4444444 0.2792527 |
| 70 | + 57.2957795 57.2957795 63.6619772 1018.5916356 1.0000000 |
| 71 | + 359.0000000 359.0000000 398.8888889 6382.2222222 6.2657320 |
| 72 | + 399.0000000 39.0000000 43.3333333 693.3333333 0.6806784 |
| 73 | + 6399.0000000 279.0000000 310.0000000 4960.0000000 4.8694686 |
| 74 | +1000000.0000000 280.0000000 311.1111111 4977.7777778 4.8869219 |
| 75 | +
|
| 76 | + gradians norm grds degrees mils radians |
| 77 | + -2.0000000 -2.0000000 -1.8000000 -32.0000000 -0.0314159 |
| 78 | + -1.0000000 -1.0000000 -0.9000000 -16.0000000 -0.0157080 |
| 79 | + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 |
| 80 | + 1.0000000 1.0000000 0.9000000 16.0000000 0.0157080 |
| 81 | + 2.0000000 2.0000000 1.8000000 32.0000000 0.0314159 |
| 82 | + 6.2831853 6.2831853 5.6548668 100.5309648 0.0986960 |
| 83 | + 16.0000000 16.0000000 14.4000000 256.0000000 0.2513274 |
| 84 | + 57.2957795 57.2957795 51.5662016 916.7324720 0.9000000 |
| 85 | + 359.0000000 359.0000000 323.1000000 5744.0000000 5.6391588 |
| 86 | + 399.0000000 399.0000000 359.1000000 6384.0000000 6.2674773 |
| 87 | + 6399.0000000 399.0000000 359.1000000 6384.0000000 6.2674773 |
| 88 | +1000000.0000000 0.0000000 0.0000000 0.0000000 0.0000000 |
| 89 | +
|
| 90 | + mils norm mils degrees gradians radians |
| 91 | + -2.0000000 -2.0000000 -0.1125000 -0.1250000 -0.0019635 |
| 92 | + -1.0000000 -1.0000000 -0.0562500 -0.0625000 -0.0009817 |
| 93 | + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 |
| 94 | + 1.0000000 1.0000000 0.0562500 0.0625000 0.0009817 |
| 95 | + 2.0000000 2.0000000 0.1125000 0.1250000 0.0019635 |
| 96 | + 6.2831853 6.2831853 0.3534292 0.3926991 0.0061685 |
| 97 | + 16.0000000 16.0000000 0.9000000 1.0000000 0.0157080 |
| 98 | + 57.2957795 57.2957795 3.2228876 3.5809862 0.0562500 |
| 99 | + 359.0000000 359.0000000 20.1937500 22.4375000 0.3524474 |
| 100 | + 399.0000000 399.0000000 22.4437500 24.9375000 0.3917173 |
| 101 | + 6399.0000000 6399.0000000 359.9437500 399.9375000 6.2822036 |
| 102 | +1000000.0000000 1600.0000000 90.0000000 100.0000000 1.5707963 |
| 103 | +
|
| 104 | + radians norm rads degrees gradians mils |
| 105 | + -2.0000000 -2.0000000 -114.5915590 -127.3239545 -2037.1832716 |
| 106 | + -1.0000000 -1.0000000 -57.2957795 -63.6619772 -1018.5916358 |
| 107 | + 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 |
| 108 | + 1.0000000 1.0000000 57.2957795 63.6619772 1018.5916358 |
| 109 | + 2.0000000 2.0000000 114.5915590 127.3239545 2037.1832716 |
| 110 | + 6.2831853 6.2831853 359.9999996 399.9999995 6399.9999927 |
| 111 | + 16.0000000 3.4336294 196.7324722 218.5916358 3497.4661726 |
| 112 | + 57.2957795 0.7471117 42.8063493 47.5626103 761.0017647 |
| 113 | + 359.0000000 0.8584375 49.1848452 54.6498280 874.3972479 |
| 114 | + 399.0000000 3.1593256 181.0160257 201.1289175 3218.0626795 |
| 115 | + 6399.0000000 2.7173573 155.6931042 172.9923380 2767.8774082 |
| 116 | +1000000.0000000 5.9256211 339.5130823 377.2367581 6035.7881302 |
| 117 | +``` |
| 118 | + |
| 119 | +--- |
| 120 | +**Attribution:** This is a community solution for the Rosetta Code task [**Angles (geometric), normalization and conversion**](https://rosettacode.org/wiki/Angles_(geometric),_normalization_and_conversion) in Zen C. |
| 121 | + |
| 122 | +*This article uses material from the Rosetta Code article **Angles (geometric), normalization and conversion**, which is released under the [GNU Free Documentation License 1.3](https://www.gnu.org/licenses/fdl-1.3.html). A list of the original authors can be found in the [page history](https://rosettacode.org/wiki/Angles_(geometric),_normalization_and_conversion?action=history).* |
0 commit comments