;; GrowingPoints ;; Written by Robb Cutler ;; July, 2004 ;; ;; Demonstrates a grid of points that grow as the mouse cursor ;; approaches them. Uses the FrTime language. ;; Require the animation library, the gui library, and the library ;; containing the build-list function. (require (lib "animation.ss" "frtime") (lib "gui.ss" "frtime") (lib "etc.ss" "frtime")) ;; distance : number number number number -> number ;; Returns the distance between (x1, y1) and (x2, y2). (define (distance x1 y1 x2 y2) (sqrt (+ (sqr (- x1 x2)) (sqr (- y1 y2))))) ;; How many growing points on one side of the grid of growing points. (define GRID-SIZE 8) ;; The distance between the centers of two adjacent growing points. (define grid-resolution (make-slider "Resolution" 2 30 20)) ;; The maximum size a growing point can grow. (define max-point-size (make-slider "Max Point Size" 2 30 20)) ;; create-growing-point : number -> line ;; Define one growing point. A point's size is such that it ;; is larger as its distance to the position of the mouse ;; cursor decreases. num is the needle's row-major ;; location on the grid (from 0 to GRID-SIZE^2-1). (define (create-growing-point num) (let* ([row (quotient num GRID-SIZE)] [col (remainder num GRID-SIZE)] [x (+ (* row grid-resolution) 25)] [y (+ (* col grid-resolution) 25)] [d (distance x y (posn-x mouse-pos) (posn-y mouse-pos))] [pt-size (if (< d (- max-point-size 2)) (- max-point-size d) 2)]) (make-circle (make-posn x y) pt-size (make-rgb (/ pt-size max-point-size) 0 0)))) ;; Define a list of growing points. (define growing-points (build-list (sqr GRID-SIZE) create-growing-point)) ;; Draw the growing points! (display-shapes growing-points)