(define (compose f g) (lambda (x) (f (g x)))) (define (rotate-point pt ang) (make-posn (- (* (posn-x pt) (cos ang)) (* (posn-y pt) (sin ang))) (+ (* (posn-y pt) (cos ang)) (* (posn-x pt) (sin ang))))) (define (make-rotation ang) (lambda (pt) (rotate-point pt ang))) (define (translate-pt pt x y) (make-posn (+ (posn-x pt) x) (+ (posn-y pt) y))) (define (scale-pt pt x y) (make-posn (* (posn-x pt) x) (* (posn-y pt) y))) (define (make-scale x y) (lambda (pt) (scale-pt pt x y))) (define (make-translate x y) (lambda (pt) (translate-pt pt x y))) (define (transform-pts transform pts) (map transform pts)) (define square (list (make-posn -1 -1) (make-posn 1 -1) (make-posn 1 1) (make-posn -1 1) (make-posn -1 -1))) (define (draw-poly-line pts color) (if (< (length pts) 2) #t (begin (draw-solid-line (car pts) (cadr pts) color) (draw-poly-line (cdr pts) color)))) (start 300 300) ;(draw-solid-line (make-posn 0 0) (make-posn 100 100) 'red) ;(draw-solid-line (make-posn 0 0) (rotate-point (make-posn 100 100) (/ pi 6)) 'red) ;(posn-x (rotate-point (make-posn 100 100) (/ pi 4))) ;(draw-poly-line (list (make-posn 0 0) (make-posn 100 100)) 'red) (define pts1 (transform-pts (compose (make-translate 50 50) (compose (make-scale 10 10) (make-rotation (/ pi 4)))) square)) ; ;(draw-poly-line (transform-pts ; (compose (make-translate 50 50) ; (compose (make-scale 10 10) ; (make-rotation (/ pi 4)))) ; square) 'red) (define (make-translate-rotate-scale x y s) (lambda (ang) (compose (make-translate x y ) (compose (make-scale s s) (make-rotation ang) )))) (define trans1 (make-translate-rotate-scale 150 150 100)) ;(draw-poly-line (transform-pts ; (trans1 (/ pi 4)) ; square) 'red) (define (draw-star n inc) (if (< n 0) #t (begin (draw-poly-line (transform-pts (trans1 (* n inc)) square) 'red) (draw-star (- n 1) inc)))) (define n 50) (draw-star n (/ pi n))