diff --git a/pkgs/htdp-pkgs/htdp-lib/2htdp/private/image-more.rkt b/pkgs/htdp-pkgs/htdp-lib/2htdp/private/image-more.rkt index 7937f5f1c4..1d8e045720 100644 --- a/pkgs/htdp-pkgs/htdp-lib/2htdp/private/image-more.rkt +++ b/pkgs/htdp-pkgs/htdp-lib/2htdp/private/image-more.rkt @@ -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)] diff --git a/pkgs/htdp-pkgs/htdp-lib/2htdp/private/img-err.rkt b/pkgs/htdp-pkgs/htdp-lib/2htdp/private/img-err.rkt index 297b9a2f88..76d94a4d9c 100644 --- a/pkgs/htdp-pkgs/htdp-lib/2htdp/private/img-err.rkt +++ b/pkgs/htdp-pkgs/htdp-lib/2htdp/private/img-err.rkt @@ -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))