(define-record-type rectangle (make-rectangle begin end) rectangle? (begin rect-begin ) (end rect-end ) ) ;; Whether a point falls within a rectangle, including the rectangle's edges. (define (in-rect? p r) (and (point? p) (rectangle? r) (p>= p (range-begin r)) (p<= p (range-end r)))) ;; rect-union x y yields the smallest rectangle z such that x ``includes`` ;; z and y ``includes`` z. (define rect-union (let ((f (lambda (fl fr) (lambda (a b) (make-rect (fl (rect-begin a) (rect-end b)) (fr (rect-begin b) (rect-end b))))))) (f pmin pmax))) ;; Yields whether the second argument completely falls within the ;; first argument. (define (rect-includes? r) (and (rectangle? r) (lambda (x) (and (rectangle? x) (in-rect? (rect-begin x) r) (in-rect? (rect-end x) r)))))