SICP 問題 2.50(ペインタの変換)

問題

ペインタを水平に逆転する変換 flip-horiz と、ペインタを反時計回りに180度と270度回転する変換を定義せよ。


解答

transform-painter 手続きを使えば一発ですな。
以下の手続きを、前エントリで分離した painter.scm に追記する。

;水平に逆転する変換
(define (flip-horiz painter)
  (transform-painter painter
		    (make-vect 1.0 0.0)
		    (make-vect 0.0 0.0)
		    (make-vect 1.0 1.0)))

;反時計回り180度回転する変換
(define (rotate180 painter)
  (rotate90 (rotate90 painter)))

;反時計回り270度回転する変換
(define (rotate180 painter)
  (rotate90 (rotate90 (rotate90 painter))))

で、それぞれの変換をかけたペインタで描画してみる。
では実験。

((flip-horiz house) frame)


((rotate180 house) frame)


((rotate270 house) frame)

おっけ〜。