;; The first three lines of this file were inserted by DrScheme. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-beginner-reader.ss" "lang")((modname entry10) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp"))))) ;;QUICKLY EDITTABLE VARIABLES ;frame rate (define pause-time .75) ;number of square pixels (define pixels 750) ;define the inner radius (inside the ring of circles) (define inner-radius 270) ;for quick changing of circle sizes (define starting-radius 60) (define increase 5) ;starting position (1-8) (define start-posn 2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;Circle structure, with coordinates x,y and a radius (define-struct circle (x y radius)) ;;define the center (define center (/ pixels 2)) ;;define the offset of the inner radius from the center (define inner-radius-offset (- inner-radius (/ center 2))) ;;contract: number->number ;;purpose: calculates scaled radius given circle number (define (radius circle-num) (+ starting-radius (* increase circle-num))) ;;the offset for the circles at 45 degree angles (define offset-corner (+ (/ (* center (sqrt 2)) 4) (* inner-radius-offset (/ (sqrt 2) 2)))) ;;the offset for the right angles (define offset-right (+ (/ center 2) inner-radius-offset)) ;;Defininitions of our eight circles (define circle1 (make-circle center (- center offset-right) (radius 1))) (define circle2 (make-circle (+ center offset-corner) (- center offset-corner) (radius 2))) (define circle3 (make-circle (+ center offset-right) center (radius 3))) (define circle4 (make-circle (+ center offset-corner) (+ center offset-corner) (radius 4))) (define circle5 (make-circle center (+ center offset-right) (radius 5))) (define circle6 (make-circle (- center offset-corner) (+ center offset-corner) (radius 6))) (define circle7 (make-circle (- center offset-right) center (radius 7))) (define circle8 (make-circle (- center offset-corner) (- center offset-corner) (radius 8))) (start pixels pixels) ;;contract: number symbol -> boolean (and draw) ;;purpose: draws circle number 'num' in a given color (define (create-circle num color) (cond [(= num 1) (and (clear-solid-disk (make-posn (circle-x circle1) (circle-y circle1)) (circle-radius circle1)) (draw-solid-disk (make-posn (circle-x circle1) (circle-y circle1)) (circle-radius circle1) color))] [(= num 2) (and (clear-solid-disk (make-posn (circle-x circle2) (circle-y circle2)) (circle-radius circle2)) (draw-solid-disk (make-posn (circle-x circle2) (circle-y circle2)) (circle-radius circle2) color))] [(= num 3) (and (clear-solid-disk (make-posn (circle-x circle3) (circle-y circle3)) (circle-radius circle3)) (draw-solid-disk (make-posn (circle-x circle3) (circle-y circle3)) (circle-radius circle3) color))] [(= num 4) (and (clear-solid-disk (make-posn (circle-x circle4) (circle-y circle4)) (circle-radius circle4)) (draw-solid-disk (make-posn (circle-x circle4) (circle-y circle4)) (circle-radius circle4) color))] [(= num 5) (and (clear-solid-disk (make-posn (circle-x circle5) (circle-y circle5)) (circle-radius circle5)) (draw-solid-disk (make-posn (circle-x circle5) (circle-y circle5)) (circle-radius circle5) color))] [(= num 6) (and (clear-solid-disk (make-posn (circle-x circle6) (circle-y circle6)) (circle-radius circle6)) (draw-solid-disk (make-posn (circle-x circle6) (circle-y circle6)) (circle-radius circle6) color))] [(= num 7) (and (clear-solid-disk (make-posn (circle-x circle7) (circle-y circle7)) (circle-radius circle7)) (draw-solid-disk (make-posn (circle-x circle7) (circle-y circle7)) (circle-radius circle7) color))] [(= num 8) (and (clear-solid-disk (make-posn (circle-x circle8) (circle-y circle8)) (circle-radius circle8)) (draw-solid-disk (make-posn (circle-x circle8) (circle-y circle8)) (circle-radius circle8) color))] [else false])) ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;TESTS ;(create-circle 1 'red) ;(create-circle 3 'blue) ;(create-circle 4 'red) ;(create-circle 5 'red) ;(create-circle 8 'green) ;;Color pattern structure, for eight colors (define-struct pattern (c1 c2 c3 c4 c5 c6 c7 c8)) ;;defining our color patterns (define pattern1 (make-pattern 'red 'orange 'yellow 'green 'blue 'indigo 'violet 'black)) (define pattern2 (make-pattern 'black 'red 'orange 'yellow 'green 'blue 'indigo 'violet)) (define pattern3 (make-pattern 'violet 'black 'red 'orange 'yellow 'green 'blue 'indigo)) (define pattern4 (make-pattern 'indigo 'violet 'black 'red 'orange 'yellow 'green 'blue)) (define pattern5 (make-pattern 'blue 'indigo 'violet 'black 'red 'orange 'yellow 'green)) (define pattern6 (make-pattern 'green 'blue 'indigo 'violet 'black 'red 'orange 'yellow)) (define pattern7 (make-pattern 'yellow 'green 'blue 'indigo 'violet 'black 'red 'orange)) (define pattern8 (make-pattern 'orange 'yellow 'green 'blue 'indigo 'violet 'black 'red)) ;;contract: pattern -> boolean (draw) ;;purpose: draw the current pattern (define (draw-pattern current-pattern) (and (create-circle 1 (pattern-c1 current-pattern)) (create-circle 2 (pattern-c2 current-pattern)) (create-circle 3 (pattern-c3 current-pattern)) (create-circle 4 (pattern-c4 current-pattern)) (create-circle 5 (pattern-c5 current-pattern)) (create-circle 6 (pattern-c6 current-pattern)) (create-circle 7 (pattern-c7 current-pattern)) (create-circle 8 (pattern-c8 current-pattern)) (sleep-for-a-while pause-time) ) ) ;;contract: number -> number ;;purpose: to use this function on itself to draw the patterns (define (next-pattern current-number) (cond [(and (= current-number 1) (draw-pattern pattern1)) (+ current-number 1)] [(and (= current-number 2) (draw-pattern pattern2)) (+ current-number 1)] [(and (= current-number 3) (draw-pattern pattern3)) (+ current-number 1)] [(and (= current-number 4) (draw-pattern pattern4)) (+ current-number 1)] [(and (= current-number 5) (draw-pattern pattern5)) (+ current-number 1)] [(and (= current-number 6) (draw-pattern pattern6)) (+ current-number 1)] [(and (= current-number 7) (draw-pattern pattern7)) (+ current-number 1)] [(and (= current-number 8) (draw-pattern pattern8)) 1] )) (= (next-pattern (next-pattern (next-pattern (next-pattern (next-pattern (next-pattern (next-pattern (next-pattern start-posn)))))))) start-posn)