Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang sicp
- (#%require sicp-pict)
- ; нужно поставить https://planet.racket-lang.org/package-source/neil/sicp.plt/1/18/planet-docs/sicp/index.html
- ;; boilerplate
- (define wave
- (segments->painter
- (list
- (make-segment (make-vect 0.20 0.00) (make-vect 0.35 0.50))
- (make-segment (make-vect 0.35 0.50) (make-vect 0.30 0.60))
- (make-segment (make-vect 0.30 0.60) (make-vect 0.15 0.45))
- (make-segment (make-vect 0.15 0.45) (make-vect 0.00 0.60))
- (make-segment (make-vect 0.00 0.80) (make-vect 0.15 0.65))
- (make-segment (make-vect 0.15 0.65) (make-vect 0.30 0.70))
- (make-segment (make-vect 0.30 0.70) (make-vect 0.40 0.70))
- (make-segment (make-vect 0.40 0.70) (make-vect 0.35 0.85))
- (make-segment (make-vect 0.35 0.85) (make-vect 0.40 1.00))
- (make-segment (make-vect 0.60 1.00) (make-vect 0.65 0.85))
- (make-segment (make-vect 0.65 0.85) (make-vect 0.60 0.70))
- (make-segment (make-vect 0.60 0.70) (make-vect 0.75 0.70))
- (make-segment (make-vect 0.75 0.70) (make-vect 1.00 0.40))
- (make-segment (make-vect 1.00 0.20) (make-vect 0.60 0.48))
- (make-segment (make-vect 0.60 0.48) (make-vect 0.80 0.00))
- (make-segment (make-vect 0.40 0.00) (make-vect 0.50 0.30))
- (make-segment (make-vect 0.50 0.30) (make-vect 0.60 0.00)))))
- (define (transform-painter painter origin corner1 corner2)
- (lambda (frame)
- (let ((m (frame-coord-map frame)))
- (let ((new-origin (m origin)))
- (painter
- (make-frame new-origin
- (vector-sub (m corner1) new-origin)
- (vector-sub (m corner2) new-origin)))))))
- (define (rotate90 painter)
- (transform-painter painter
- (make-vect 1.0 0.0)
- (make-vect 1.0 1.0)
- (make-vect 0.0 0.0)))
- (define (rotate270 painter)
- (transform-painter painter
- (make-vect 0.0 1.0)
- (make-vect 0.0 0.0)
- (make-vect 1.0 1.0)))
- (define (beside painter1 painter2)
- (let ((split-point (make-vect 0.5 0.0)))
- (let ((paint-left
- (transform-painter painter1
- (make-vect 0.0 0.0)
- split-point
- (make-vect 0.0 1.0)))
- (paint-right
- (transform-painter painter2
- split-point
- (make-vect 1.0 0.0)
- (make-vect 0.5 1.0))))
- (lambda (frame)
- (paint-left frame)
- (paint-right frame)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement