Angles (geometric), normalization and conversion: Difference between revisions
Content added Content deleted
m (→{{header|Racket}}: stub) |
|||
Line 1,551: | Line 1,551: | ||
=={{header|Racket}}== |
=={{header|Racket}}== |
||
{{trans|Common Lisp}} |
|||
<lang racket> |
|||
</lang> |
|||
<lang racket>#lang racket |
|||
(define (rem n m) |
|||
(let* ((m (abs m)) (-m (- m))) |
|||
(let recur ((n n)) |
|||
(cond [(< n -m) (recur (+ n m))] |
|||
[(>= n m) (recur (- n m))] |
|||
[else n])))) |
|||
(define 2.pi (* 2 pi)) |
|||
(define (deg->deg a) (rem a 360)) |
|||
(define (grad->grad a) (rem a 400)) |
|||
(define (mil->mil a) (rem a 6400)) |
|||
(define (rad->rad a) (rem a 2.pi)) |
|||
(define (deg->grad a) (grad->grad (* (/ a 360) 400))) |
|||
(define (deg->rad a) (rad->rad (* (/ a 360) 2.pi))) |
|||
(define (deg->mil a) (mil->mil (* (/ a 360) 6400))) |
|||
(define (grad->deg a) (deg->deg (* (/ a 400) 360))) |
|||
(define (grad->rad a) (rad->rad (* (/ a 400) 2.pi))) |
|||
(define (grad->mil a) (mil->mil (* (/ a 400) 6400))) |
|||
(define (mil->deg a) (deg->deg (* (/ a 6400) 360))) |
|||
(define (mil->grad a) (grad->grad (* (/ a 6400) 400))) |
|||
(define (mil->rad a) (rad->rad (* (/ a 6400) 2.pi))) |
|||
(define (rad->deg a) (deg->deg (* (/ a 2.pi) 360))) |
|||
(define (rad->grad a) (grad->grad (* (/ a 2.pi) 400))) |
|||
(define (rad->mil a) (mil->mil (* (/ a 2.pi) 6400))) |
|||
(define (tabulate #:fmt (fmt (λ (v) (~a (exact->inexact v) #:align 'right #:width 15))) head . vs) |
|||
(string-join (cons (~a #:width 6 head) (map fmt vs)) " | ")) |
|||
(define (report-angle a) |
|||
(string-join |
|||
(list |
|||
(tabulate #:fmt (λ (x) (~a x #:width 15 #:align 'center)) "UNIT" "VAL*" "DEG" "GRAD" "MIL" "RAD") |
|||
(tabulate "Deg" a (deg->deg a) (deg->grad a) (deg->mil a) (deg->rad a)) |
|||
(tabulate "Grad" a (grad->deg a) (grad->grad a) (grad->mil a) (grad->rad a)) |
|||
(tabulate "Mil" a (mil->deg a) (mil->grad a) (mil->mil a) (mil->rad a)) |
|||
(tabulate "Rad" a (rad->deg a) (rad->grad a) (rad->mil a) (rad->rad a))) |
|||
"\n")) |
|||
(module+ test |
|||
(displayln |
|||
(string-join (map report-angle '(-2 -1 0 1 2 6.2831853 16 57.2957795 359 399 6399 1000000)) |
|||
"\n\n")))</lang> |
|||
{{out}} |
{{out}} |
||
<pre>UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
<pre> |
|||
Deg | -2.0 | -2.0 | -2.222222222222 | -35.55555555555 | -0.034906585039 |
|||
</pre> |
|||
Grad | -2.0 | -1.8 | -2.0 | -32.0 | -0.031415926535 |
|||
Mil | -2.0 | -0.1125 | -0.125 | -2.0 | -0.001963495408 |
|||
Rad | -2.0 | -114.5915590261 | -127.3239544735 | -2037.183271576 | -2.0 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | -1.0 | -1.0 | -1.111111111111 | -17.77777777777 | -0.017453292519 |
|||
Grad | -1.0 | -0.9 | -1.0 | -16.0 | -0.015707963267 |
|||
Mil | -1.0 | -0.05625 | -0.0625 | -1.0 | -0.000981747704 |
|||
Rad | -1.0 | -57.29577951308 | -63.66197723675 | -1018.591635788 | -1.0 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
|||
Grad | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
|||
Mil | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
|||
Rad | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 1.0 | 1.0 | 1.1111111111111 | 17.777777777777 | 0.0174532925199 |
|||
Grad | 1.0 | 0.9 | 1.0 | 16.0 | 0.0157079632679 |
|||
Mil | 1.0 | 0.05625 | 0.0625 | 1.0 | 0.0009817477042 |
|||
Rad | 1.0 | 57.295779513082 | 63.661977236758 | 1018.5916357881 | 1.0 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 2.0 | 2.0 | 2.2222222222222 | 35.555555555555 | 0.0349065850398 |
|||
Grad | 2.0 | 1.8 | 2.0 | 32.0 | 0.0314159265358 |
|||
Mil | 2.0 | 0.1125 | 0.125 | 2.0 | 0.0019634954084 |
|||
Rad | 2.0 | 114.59155902616 | 127.32395447351 | 2037.1832715762 | 2.0 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 6.2831853 | 6.2831853 | 6.9813170000000 | 111.70107200000 | 0.1096622709979 |
|||
Grad | 6.2831853 | 5.6548667700000 | 6.2831853 | 100.5309648 | 0.0986960438981 |
|||
Mil | 6.2831853 | 0.3534291731250 | 0.39269908125 | 6.2831853 | 0.0061685027436 |
|||
Rad | 6.2831853 | 359.99999958864 | 399.99999954293 | 6399.9999926869 | 6.2831853 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 16.0 | 16.0 | 17.777777777777 | 284.44444444444 | 0.2792526803190 |
|||
Grad | 16.0 | 14.4 | 16.0 | 256.0 | 0.2513274122871 |
|||
Mil | 16.0 | 0.9 | 1.0 | 16.0 | 0.0157079632679 |
|||
Rad | 16.0 | 196.73247220931 | 218.59163578813 | 3497.4661726100 | 3.4336293856408 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 57.2957795 | 57.2957795 | 63.661977222222 | 1018.5916355555 | 0.9999999997716 |
|||
Grad | 57.2957795 | 51.56620155 | 57.2957795 | 916.732472 | 0.8999999997945 |
|||
Mil | 57.2957795 | 3.222887596875 | 3.58098621875 | 57.2957795 | 0.0562499999871 |
|||
Rad | 57.2957795 | 42.806349262182 | 47.562610291313 | 761.00176466102 | 0.7471117353837 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 359.0 | 359.0 | 398.88888888888 | 6382.2222222222 | 6.2657320146596 |
|||
Grad | 359.0 | 323.1 | 359.0 | 5744.0 | 5.6391588131936 |
|||
Mil | 359.0 | 20.19375 | 22.4375 | 359.0 | 0.3524474258246 |
|||
Rad | 359.0 | 49.184845196556 | 54.649827996174 | 874.39724793878 | 0.8584374907637 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 399.0 | 39.0 | 43.333333333333 | 693.33333333333 | 0.6806784082777 |
|||
Grad | 399.0 | 359.1 | 399.0 | 6384.0 | 6.2674773439116 |
|||
Mil | 399.0 | 22.44375 | 24.9375 | 399.0 | 0.3917173339944 |
|||
Rad | 399.0 | 181.01602571984 | 201.12891746649 | 3218.0626794639 | 3.1593256476863 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 6399.0 | 279.0 | 310.0 | 4960.0 | 4.8694686130641 |
|||
Grad | 6399.0 | 359.1 | 399.0 | 6384.0 | 6.2674773439116 |
|||
Mil | 6399.0 | 359.94375 | 399.9375 | 6399.0 | 6.2822035594753 |
|||
Rad | 6399.0 | 155.69310421380 | 172.99233801534 | 2767.8774082455 | 2.7173572912109 |
|||
UNIT | VAL* | DEG | GRAD | MIL | RAD |
|||
Deg | 1000000.0 | 280.0 | 311.11111111111 | 4977.7777777777 | 4.8869219047104 |
|||
Grad | 1000000.0 | 0.0 | 0.0 | 0.0 | 6.2831853064904 |
|||
Mil | 1000000.0 | 90.0 | 100.0 | 1600.0 | 1.5707963267971 |
|||
Rad | 1000000.0 | 339.51308232545 | 377.23675813525 | 6035.7881301641 | 5.9256225262850</pre> |
|||
=={{header|Raku}}== |
=={{header|Raku}}== |