adjust angle->proper-range based on Neil's advice
This commit is contained in:
parent
1b5dbcbca8
commit
0358d7079b
|
@ -705,6 +705,7 @@
|
|||
(max ay by cy dy))))
|
||||
|
||||
(define (rotate-points in-points θ)
|
||||
(printf "θ ~s\n" θ)
|
||||
(let* ([cs (map point->c in-points)]
|
||||
[vectors (points->vectors cs)]
|
||||
[rotated-vectors (map (λ (c) (rotate-c c θ)) vectors)]
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
(require htdp/error
|
||||
racket/class
|
||||
racket/contract
|
||||
lang/posn
|
||||
(except-in racket/draw
|
||||
make-pen make-color)
|
||||
|
@ -347,24 +348,27 @@
|
|||
(not (or (= arg +inf.0)
|
||||
(= arg -inf.0)
|
||||
(equal? arg +nan.0)))))
|
||||
|
||||
(define (angle->proper-range α)
|
||||
(define eα (inexact->exact α))
|
||||
(define rα (round eα))
|
||||
(define whole-part (modulo rα 360))
|
||||
(define decimal-part (- eα rα))
|
||||
(if (and (zero? whole-part)
|
||||
(negative? decimal-part))
|
||||
(+ 360 decimal-part)
|
||||
(+ whole-part decimal-part)))
|
||||
|
||||
(define/contract (angle->proper-range α)
|
||||
(-> real? (between/c 0 360))
|
||||
(let loop ([θ (- α (* 360 (floor (/ α 360))))])
|
||||
(cond [(negative? θ) (+ θ 360)]
|
||||
[(>= θ 360) (- θ 360)]
|
||||
[else θ])))
|
||||
|
||||
(module+ test
|
||||
(require rackunit)
|
||||
(check-equal? (angle->proper-range 1) 1)
|
||||
(check-equal? (angle->proper-range 361) 1)
|
||||
(check-equal? (angle->proper-range 0.5) 0.5)
|
||||
(check-equal? (angle->proper-range 1/2) 1/2)
|
||||
(check-equal? (angle->proper-range -1) 359)
|
||||
(check-equal? (angle->proper-range #e-1.5) #e358.5)
|
||||
(check-equal? (angle->proper-range #e-.1) #e359.9)
|
||||
|
||||
(check-equal? (angle->proper-range 1.0) 1.0)
|
||||
(check-equal? (angle->proper-range 361.0) 1.0)
|
||||
(check-equal? (angle->proper-range 0.5) 0.5)
|
||||
(check-equal? (angle->proper-range -1.0) 359.0)
|
||||
(check-equal? (angle->proper-range -1.5) 358.5)
|
||||
(check-equal? (angle->proper-range -.1) 359.9)
|
||||
(check-equal? (angle->proper-range #i-7.347880794884119e-016)
|
||||
(+ 360 #i-7.347880794884119e-016)))
|
||||
(check-equal? (angle->proper-range #i-7.347880794884119e-016) 0.0))
|
||||
|
|
Loading…
Reference in New Issue
Block a user