;;; Scheme Recursive Art Contest Entry ;;; ;;; Please do not include your name or personal info in this file. ;;; ;;; Title: << "" 1 6 FOR I RAND 26 * IP "A" NUM + CHR + NEXT >> ;;; ;;; Description: ;;; Out of randomness, ;;; an image emerges. ;;; Yours to interpret. (define (draw) () (exitonclick)) ;;; insecure LCG implemented below (define seed 23298572) (define m (expt 2 32)) (define a 1103515245) (define c 12345) (define (rand seed) (modulo (+ (* a seed) c) m)) (define (lindex lst index) (if (eq? index 0) (car lst) (lindex (cdr lst) (- index 1)))) (define (fact x) (if (eq? x 0) 1 (* x (fact (- x 1))))) (define (comb n k) (/ (fact n) (* (fact k) (fact (- n k))))) (define (evalbezier points order u term) (if (> term order) 0 (+ (* (lindex points term) (comb order term) (expt (- 1 u) (- order term)) (expt u term)) (evalbezier points order u (+ term 1))))) (define (plotbezier points_x points_y order u) (if (< u 1) (begin (goto (evalbezier points_x order u 0) (evalbezier points_y order u 0)) (pd) (goto (evalbezier points_x order (+ u 0.05) 0) (evalbezier points_y order (+ u 0.05) 0)) (pu) (plotbezier points_x points_y order (+ u 0.05))))) (define (makepoints n low high seed) (if (eq? n 0) nil (begin (define seed (rand seed)) (cons (+ (modulo seed (- high low)) low) (makepoints (- n 1) low high seed))))) (pu) (begin_fill) (print (makepoints 10 -100 100 seed)) (define x_pts (makepoints 50 -500 500 seed)) (define seed (lindex x_pts (- (length x_pts) 1))) (define y_pts (makepoints 50 -500 500 seed)) (define seed (lindex y_pts (- (length x_pts) 1))) (define x_pts (append x_pts (makepoints 50 -500 500 seed))) (define seed (lindex x_pts (- (length x_pts) 1))) (define y_pts (append y_pts (makepoints 50 -500 500 seed))) (plotbezier x_pts y_pts 9 0) (end_fill) ; Please leave this last line alone. You may add additional procedures above ; this line. (draw)