Jump to content

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

Line 1,551:
=={{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}}
<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}}==
569

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.