#lang sicp (#%require sicp-pict) (define (xcor-vect v) (vector-xcor v)) (define (ycor-vect v) (vector-ycor v)) (define (add-vect u v) (make-vect (+ (xcor-vect u) (xcor-vect v)) (+ (ycor-vect u) (ycor-vect v)))) (define (sub-vect u v) (make-vect (- (xcor-vect u) (xcor-vect v)) (- (ycor-vect u) (ycor-vect v)))) (define (scale-vect s v) (make-vect (* s (xcor-vect v)) (* s (ycor-vect v)))) (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 (sub-vect (m corner1) new-origin) (sub-vect (m corner2) new-origin))))))) ; remember 1 is BELOW 2 (define (below-a painter1 painter2) (lambda (frame) (let ((paint-lo (transform-painter painter1 (make-vect 0.0 0.0) (make-vect 1.0 0.0) (make-vect 0.0 0.5))) (paint-hi (transform-painter painter2 (make-vect 0.0 0.5) (make-vect 1.0 0.5) (make-vect 0.0 1.0)))) (paint-lo frame) (paint-hi frame)))) (define (below-b painter1 painter2) (rotate270 (beside (rotate90 painter2) (rotate90 painter1))))