#lang sicp (#%require sicp-pict) ; inappropriate for the way racket implemented these vectors ;(define (make-vect x y) (cons x y)) ;(define (xcor-vect v) (car v)) ;(define (ycor-vect v) (cdr v)) (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))))))) (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)))