Exercise2-48 <---> Exercise2-50

Exercise 2.49

Use segments->painter to define the following primitive painters:

a. The painter that draws the outline of the designated frame.

b. The painter that draws an "X" by connecting opposite corners of the frame.

c. The painter that draws a diamond shape by connecting the midpoints of the sides of the frame.

d. The wave painter.


Scheme solution:

(define outline
  (segments->painter
    (list (make-segment (make-vect 0 0) (make-vect 0 1))
          (make-segment (make-vect 0 1) (make-vect 1 1))
          (make-segment (make-vect 1 1) (make-vect 1 0))
          (make-segment (make-vect 1 0) (make-vect 0 0)))))

(define x
  (segments->painter
    (list (make-segment (make-vect 0 0) (make-vect 1 1))
          (make-segment (make-vect 0 1) (make-vect 1 0)))))

(define diamond
  (segments->painter
    (list (make-segment (make-vect 0 0.5) (make-vect 0.5 0))
          (make-segment (make-vect 0.5 0) (make-vect 1 0.5))
          (make-segment (make-vect 1 0.5) (make-vect 0.5 1))
          (make-segment (make-vect 0.5 1) (make-vect 0 0.5)))))

(define wave
  (segments->painter
    (list (make-segment (make-vect 0.60 0.00) (make-vect 0.50 0.30))
          (make-segment (make-vect 0.50 0.30) (make-vect 0.40 0.00))
          (make-segment (make-vect 0.25 0.00) (make-vect 0.35 0.40))
          (make-segment (make-vect 0.35 0.40) (make-vect 0.30 0.50))
          (make-segment (make-vect 0.30 0.50) (make-vect 0.15 0.35))
          (make-segment (make-vect 0.15 0.35) (make-vect 0.00 0.60))
          (make-segment (make-vect 0.00 0.80) (make-vect 0.15 0.55))
          (make-segment (make-vect 0.15 0.55) (make-vect 0.30 0.60))
          (make-segment (make-vect 0.30 0.60) (make-vect 0.40 0.60))
          (make-segment (make-vect 0.40 0.60) (make-vect 0.35 0.80))
          (make-segment (make-vect 0.35 0.80) (make-vect 0.40 1.00))
          (make-segment (make-vect 0.60 1.00) (make-vect 0.65 0.80))
          (make-segment (make-vect 0.65 0.80) (make-vect 0.60 0.60))
          (make-segment (make-vect 0.60 0.60) (make-vect 0.75 0.60))
          (make-segment (make-vect 0.75 0.60) (make-vect 1.00 0.40))
          (make-segment (make-vect 1.00 0.20) (make-vect 0.60 0.40))
          (make-segment (make-vect 0.60 0.40) (make-vect 0.75 0.00)))))

Exercise2-48 <---> Exercise2-50


Comments

Good work on the wave! Helpful to use it while viewing output of other exercises. Thanks.
Posted by SriramDevadas at 2008-07-03 19:27:49

:) :)) :( ;) :\ |) X-( B) Markup

Exercise2-49 (last edited 2008-06-26 05:49:23 by SteveChapel)