SICP問題2.49
segments->painterを用いたペインタの作成
a. 指定された外形を描くペインタ
(define (outline-painter frame) ((segment->painter (list (make-segment (make-vect 0 0) (make-vect 1 0)) (make-segment (make-vect 0 0) (make-vect 0 1)) (make-segment (make-vect 1 0) (make-vect 1 1)) (make-segment (make-vect 0 1) (make-vect 1 1)))) frame))
b. フレームの向かい側の頂点を結んでXを書くペインタ
(define (diagonal-line-painter frame) ((segment->painter (list (make-segment (make-vect 0 0) (make-vect 1 1)) (make-segment (make-vect 0 1) (make-vect 1 0)))) frame))
c. フレームの中点を結んでひし形を書くペインタ
(define (diamond-painter frame) ((segment->painter (list (make-segment (make-vect 0 0.5) (make-vect 0.5 1)) (make-segment (make-vect 0.5 1) (make-vect 1 0.5)) (make-segment (make-vect 0.5 0) (make-vect 1 0.5)) (make-segment (make-vect 0 0.5) (make-vect 0.5 0)))) frame))
d. waveペインタ
(define (wave frame) ((segment->painter (list (make-segment (make-vect 0 0.84) (make-vect 0.14 0.59)) (make-segment (make-vect 0.14 0.59) (make-vect 0.30 0.65)) (make-segment (make-vect 0.30 0.65) (make-vect 0.41 0.65)) (make-segment (make-vect 0.41 0.65) (make-vect 0.35 0.86)) (make-segment (make-vect 0.35 0.86) (make-vect 0.41 1.00)) (make-segment (make-vect 0.60 1.00) (make-vect 0.65 0.84)) (make-segment (make-vect 0.65 0.84) (make-vect 0.61 0.65)) (make-segment (make-vect 0.61 0.65) (make-vect 0.75 0.65)) (make-segment (make-vect 0.75 0.65) (make-vect 1.00 0.35)) (make-segment (make-vect 1.00 0.14) (make-vect 0.61 0.44)) (make-segment (make-vect 0.61 0.44) (make-vect 0.76 0.00)) (make-segment (make-vect 0.60 0.0) (make-vect 0.51 0.30)) (make-segment (make-vect 0.51 0.30) (make-vect 0.41 0.00)) (make-segment (make-vect 0.26 0.00) (make-vect 0.35 0.51)) (make-segment (make-vect 0.35 0.51) (make-vect 0.30 0.59)) (make-segment (make-vect 0.30 0.59) (make-vect 0.16 0.40)) (make-segment (make-vect 0.16 0.40) (make-vect 0.00 0.65)) )) frame))