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))