Advertisement
Guest User

Untitled

a guest
Jul 26th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.67 KB | None | 0 0
  1. #lang sicp
  2. (#%require sicp-pict)
  3. ; нужно поставить https://planet.racket-lang.org/package-source/neil/sicp.plt/1/18/planet-docs/sicp/index.html
  4.  
  5.  
  6. ;; boilerplate
  7. (define wave
  8.   (segments->painter
  9.    (list
  10.     (make-segment (make-vect 0.20 0.00) (make-vect 0.35 0.50))
  11.     (make-segment (make-vect 0.35 0.50) (make-vect 0.30 0.60))
  12.     (make-segment (make-vect 0.30 0.60) (make-vect 0.15 0.45))
  13.     (make-segment (make-vect 0.15 0.45) (make-vect 0.00 0.60))
  14.     (make-segment (make-vect 0.00 0.80) (make-vect 0.15 0.65))
  15.     (make-segment (make-vect 0.15 0.65) (make-vect 0.30 0.70))
  16.     (make-segment (make-vect 0.30 0.70) (make-vect 0.40 0.70))
  17.     (make-segment (make-vect 0.40 0.70) (make-vect 0.35 0.85))
  18.     (make-segment (make-vect 0.35 0.85) (make-vect 0.40 1.00))
  19.     (make-segment (make-vect 0.60 1.00) (make-vect 0.65 0.85))
  20.     (make-segment (make-vect 0.65 0.85) (make-vect 0.60 0.70))
  21.     (make-segment (make-vect 0.60 0.70) (make-vect 0.75 0.70))
  22.     (make-segment (make-vect 0.75 0.70) (make-vect 1.00 0.40))
  23.     (make-segment (make-vect 1.00 0.20) (make-vect 0.60 0.48))
  24.     (make-segment (make-vect 0.60 0.48) (make-vect 0.80 0.00))
  25.     (make-segment (make-vect 0.40 0.00) (make-vect 0.50 0.30))
  26.     (make-segment (make-vect 0.50 0.30) (make-vect 0.60 0.00)))))
  27.  
  28. (define (transform-painter painter origin corner1 corner2)
  29.     (lambda (frame)
  30.         (let ((m (frame-coord-map frame)))
  31.             (let ((new-origin (m origin)))
  32.                 (painter
  33.                  (make-frame new-origin
  34.                              (vector-sub (m corner1) new-origin)
  35.                              (vector-sub (m corner2) new-origin)))))))
  36.  
  37. (define (rotate90 painter)
  38.     (transform-painter painter
  39.                        (make-vect 1.0 0.0)
  40.                        (make-vect 1.0 1.0)
  41.                        (make-vect 0.0 0.0)))
  42.  
  43. (define (rotate270 painter)
  44.     (transform-painter painter
  45.                        (make-vect 0.0 1.0)
  46.                        (make-vect 0.0 0.0)
  47.                        (make-vect 1.0 1.0)))
  48.  
  49. (define (beside painter1 painter2)
  50.     (let ((split-point (make-vect 0.5 0.0)))
  51.         (let ((paint-left
  52.                (transform-painter painter1
  53.                                   (make-vect 0.0 0.0)
  54.                                   split-point
  55.                                   (make-vect 0.0 1.0)))
  56.               (paint-right
  57.                (transform-painter painter2
  58.                                   split-point
  59.                                   (make-vect 1.0 0.0)
  60.                                   (make-vect 0.5 1.0))))
  61.             (lambda (frame)
  62.                 (paint-left frame)
  63.                 (paint-right frame)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement