;;; Scheme Recursive Art Contest Entry ;;; ;;; Please do not include your name or personal info in this file. ;;; ;;; Title: ;;; ;;; Description: ;;; ;;; variable definitions (define biggest (if (< (screen_width) (screen_height)) (floor (/ (screen_width) 2)) (floor (/ (screen_height) 2)))) (define big-dot (* biggest 0.04)) (define shade (/ 1 400)) (define (spacing) (random-choice '(20 30 40))) (define colors (list (list '(0 0 0) (lambda (c) (list (+ (car c) shade) (+ (cadr c) shade) (+ (caddr c) shade)))) (list '(0.5 0.5 0) (lambda (c) (list (- (car c) shade) (- (cadr c) shade) (caddr c)))) (list '(.99 .99 .99) (lambda (c) (list (- (car c) shade) (- (cadr c) shade) (- (caddr c) shade)))) (list '(0.5 0 0) (lambda (c) (list (+ (car c) shade) (cadr c) (caddr c)))))) (define (cloop i k) (cond ((>= k 1) (go-clean 0 0)) (else (canvas 0 (floor (* (screen_width) k)) (* (screen_width) (+ i k))) (cloop i (+ i k))) ) ) (define (canvas x y max) (cond ((< max y) (go-clean 0 0)) ((< (- (screen_width) 1) x) (canvas 0 (+ y 1) max)) (else (square x y (background)) (canvas (+ x 1) y max))) ) (define (pollock runs) (cond ((= 0 runs) (print 'tada)) (else (define palette (random-choice colors)) (define strt (starts)) (roll strt (slope (* (random) (random-choice '(1 -1)) (car strt) 0.08) (cadr strt) (spacing)) (cadr palette) (car palette) (* (+ (random) 0.02) big-dot)) (pollock (- runs 1)))) ) (define (roll s m f c b) (cond ((or (> (abs (car s)) biggest) (> (abs (cadr s)) biggest)) (go-clean 0 0)) ((< (length (filter (lambda (x) (or (> x 0.99) (< x 0))) c)) 0) (go-clean 0 0)) (else (go-clean (car s) (cadr s)) (dot (* (random) b) c) (roll (m (car s)) m f (f c) b))) ) ;;; utility functions (define (go-clean x y) (pu) (goto x y) (pd)) (define (cadr lst) (car (cdr lst))) (define (caddr lst) (car (cdr (cdr lst)))) (define (random-choice l) (define (chooser r i lst) (if (or (>= i r) (null? (cdr lst))) (car lst) (chooser (- r i) i (cdr lst)))) (chooser (random) (/ 1 (length l)) l)) (define (slope m b sp) (lambda (x) (list (+ x (* sp 2) (* (random) biggest -0.2)) (+ (/ (* m x) sp) b (* (random) biggest -0.1))))) ;;; art supplies (define (dot r c) (color (rgb (car c) (cadr c) (caddr c))) (begin_fill) (circle r) (end_fill)) (define (square x y c) (pixel x y (rgb (car c) (cadr c) (caddr c)))) (define (starts) (list (* (random-choice (list (random) 1)) (random-choice '(1 -1)) biggest) (* (random-choice (list (random) 1)) (random-choice '(1 -1)) biggest))) (define (background) (map (lambda (x) (+ x (* (random) (random-choice '(-0.04 0.04))))) '(.75 .75 0.9))) ;;; draw function (define (draw) (speed 0) (hideturtle) (pixelsize 21) (cloop 0.07 0) (pixelsize 1) (pollock 111) (exitonclick) ) ; Please leave this last line alone. You may add additional procedures above ; this line. (draw)