;;; Scheme Recursive Art Contest Entry ;;; ;;; Please do not include your name or personal info in this file. ;;; ;;; Title: ;;; ;;; Description: ;;; ;Token Optimization (define (gold) (color "#d69615")) (define (blue) (color "#1d3e75")) (define (white) (color "#f4f6f9")) (define (grey) (color "#d6e4f9")) (define (black) (color "#233249")) (define (pink) (color "#e8b4a2")) (define (red) (color "#ce664a")) (define (brown) (color "#3f2102")) (define (right_ninety) (rt 90)) (define (left_ninety) (lt 90)) (define (u-over-5) (fd (/ u 5))) ;Helpers (define (ellipse x y a b theta) (define (ellipse_helper x y a b theta) (if (<= theta 360) (begin (setpos (+ x (* a (cos (rad theta)))) (+ y (* b (sin (rad theta))))) (ellipse_helper x y a b (+ theta 5)) ) ) ) (setpos x y) (start) (ellipse_helper x y a b theta) (end) ) (define (draw-circle c x y r) (c) (pendown) (circle r) (penup)) (define (draw-ring c x y r1 r2) (setpos (+ x r1) y) (start) (draw-circle c x y r1) (setpos (+ x r2) y) (draw-circle c x y r2) (end)) (define (rad deg) (* 6.28318530718 (/ deg 360))) (define dots-r 10) (define (draw-dots c x y theta n count) (if (> count 0) (begin (white) (setpos (+ dots-r (* 430 (cos (rad theta)))) (* 430 (sin (rad theta)))) (start) (grey) (circle (+ dots-r 2)) (end) (start) (white) (circle dots-r) (end) (draw-dots c x y (+ theta (/ 360 n)) n (- count 1)))) ) (define (start) (pendown) (begin_fill)) (define (end) (end_fill) (penup)) (define u 35) (define (T) (fd (/ u 2)) (start) (right_ninety) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (* 3 (/ u 8))) (left_ninety) (fd (* 3 (/ u 4))) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (* 3 (/ u 4))) (left_ninety) (fd (* 3 (/ u 8))) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (end) ) (define (H) (left_ninety) (fd (/ u 2)) (pendown) (begin_fill) (right_ninety) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (* 3 (/ u 8))) (left_ninety) (fd (/ u 2)) (left_ninety) (fd (* 3 (/ u 8))) (right_ninety) (fd (/ u 4)) (right_ninety) (fd u) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (* 3 (/ u 8))) (left_ninety) (fd (/ u 2)) (left_ninety) (fd (* 3 (/ u 8))) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (end) ) (define (E) (left_ninety) (fd (/ u 2)) (start) (right_ninety) (fd (/ u 2)) (right_ninety) (fd u) (right_ninety) (u-over-5) (right_ninety) (fd (* 3 (/ u 4))) (left_ninety) (u-over-5) (left_ninety) (fd (/ u 2)) (right_ninety) (u-over-5) (right_ninety) (fd (/ u 2)) (left_ninety) (u-over-5) (left_ninety) (fd (* 3 (/ u 4))) (right_ninety) (u-over-5) (right_ninety) (fd u) (right_ninety) (fd (/ u 2)) (end) ) (define (UU u) (rt 180) (fd (/ u 2)) (start) (right_ninety) (circle (- (/ u 2)) 90) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (circle (/ u 4) 180) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (circle (- (/ u 2)) 90) (end) ) (define (N) (right_ninety) (fd (/ u 2)) (start) (right_ninety) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (rt 45) (fd (* (sqrt 2) (/ u 2))) (lt 135) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd u) (right_ninety) (fd (/ u 4)) (rt 45) (fd (* (sqrt 2) (/ u 2))) (lt 135) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (end) ) (define (I) (right_ninety) (fd (/ u 8)) (start) (right_ninety) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd u) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (end) ) (define (V) (rt 180) (fd (/ u 4)) (start) (rt 161.565) (fd (* (sqrt 10) (/ u 4))) (lt 71.565) (fd (/ u 4)) (lt 110) (fd (* (sqrt 17) (/ u 4))) (lt 70) (fd (/ u 3)) (lt 70) (fd (* (sqrt 17) (/ u 4))) (lt 110) (fd (/ u 4)) (lt 71.565) (fd (* (sqrt 10) (/ u 4))) (end) ) (define (R) (left_ninety) (fd (/ u 2)) (start) (right_ninety) (fd (/ u 2)) (right_ninety) (fd (* 2 (/ u 3))) (circle (- (/ u 3)) 180) (lt 135) (fd (* (sqrt 2) (/ u 3))) (rt 135) (fd (/ u 3)) (rt 45) (fd (* (sqrt 2) (/ u 3))) (lt 135) (fd (/ u 3)) (right_ninety) (fd (/ u 3)) (right_ninety) (fd (/ u 2)) (right_ninety) (fd (/ u 2)) (circle (/ u 6) 180) (fd (/ u 6)) (left_ninety) (fd (/ u 3)) (end) ) (define (S) (rt 60) (fd (/ 45 3)) (start) (lt 60) (circle (* 0.3 45) 180) (lt 50) (fd (/ 45 2)) (rt 50) (circle (* -0.1 45) 180) (left_ninety) (fd (/ 45 5)) (left_ninety) (circle (* 0.3 45) 180) (lt 50) (fd (/ 45 2)) (rt 50) (circle (* -0.1 45) 180) (left_ninety) (fd (/ 45 5)) (end) ) (define (YY) (fd (/ u 4)) (start) (rt 33.69) (fd (* u 0.3)) (rt 56.31) (fd (/ u 3)) (rt 126.87) (fd (* u (sqrt (+ 0.25 (/ 9 64))))) (lt 36.87) (fd (/ u 2)) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (lt 36.87) (fd (* u (sqrt (+ 0.25 (/ 9 64))))) (rt 126.87) (fd (/ u 3)) (rt 56.31) (fd (* u 0.3)) (end) ) (define (O) (fd (/ 40 2)) (start) (left_ninety) (circle (/ 40 2)) (left_ninety) (fd (/ 40 4)) (right_ninety) (circle (/ 40 4)) (end) ) (define (F) (fd (/ u 2)) (start) (right_ninety) (fd (/ u 2)) (right_ninety) (u-over-5) (right_ninety) (fd (* 2 (/ u 3))) (left_ninety) (u-over-5) (left_ninety) (fd (/ u 2)) (right_ninety) (u-over-5) (right_ninety) (fd (/ u 2)) (left_ninety) (fd (* 2 (/ u 5))) (right_ninety) (fd (/ u 3)) (right_ninety) (fd u) (right_ninety) (fd (/ u 2)) (end) ) (define (C u) (rt 60) (fd (/ (* u (/ 8 7)) 2)) (start) (left_ninety) (circle (/ (* u (/ 8 7)) 2) 300) (left_ninety) (fd (/ (* u (/ 8 7)) 4)) (left_ninety) (circle (- (/ (* u (/ 8 7)) 4)) 300) (left_ninety) (fd (/ (* u (/ 8 7)) 4)) (end) ) (define (A u) (fd (/ u 2)) (start) (right_ninety) (fd (/ u 8)) (rt 69.444) (fd (* 1.068 u)) (rt 110.556) (fd (/ u 4)) (rt 63.435) (fd (* (sqrt 5) (/ u 8))) (lt 63.435) (fd (/ u 4)) (lt 63.435) (fd (* (sqrt 5) (/ u 8))) (rt 63.435) (fd (/ u 4)) (rt 110.556) (fd (* 1.068 u)) (rt 69.444) (fd (/ u 8)) (right_ninety) (fd (/ u 4)) (rt 15) (fd (/ u (* 2 (sqrt 3)))) (lt 105) (fd (* 0.16 u)) (lt 107) (fd (/ u (* 2 (sqrt 3)))) (end) ) (define (L u) (rt 180) (fd (/ u 2)) (start) (right_ninety) (fd (/ u 2)) (right_ninety) (fd u) (right_ninety) (fd (/ u 3)) (right_ninety) (fd (* 3 (/ u 4))) (left_ninety) (fd (* 2 (/ u 3))) (right_ninety) (fd (/ u 4)) (right_ninety) (fd (/ u 2)) (end) ) (define (G) (rt 60) (fd (/ 40 2)) (start) (left_ninety) (circle (/ 40 2) 330) (left_ninety) (fd (/ 40 3)) (left_ninety) (fd (/ 40 8)) (left_ninety) (fd (* 40 (+ (/ (sqrt 3) 8) (/ 1 3) (/ -1 2)))) (rt 120) (circle (- (/ 40 4)) 300) (left_ninety) (fd (/ 40 4)) (end) ) (define (rlr) (right_ninety) (u-over-5) (right_ninety) (u-over-5) (left_ninety) (u-over-5) (left_ninety) (u-over-5) (right_ninety) (u-over-5) (right_ninety) (u-over-5) (left_ninety) (u-over-5) ) (define (hash) (fd (/ u 2)) (right_ninety) (fd (/ u 10)) (start) (u-over-5) (right_ninety) (u-over-5) (left_ninety) (u-over-5) (rlr) (rlr) (rlr) (right_ninety) (u-over-5) (right_ninety) (u-over-5) (left_ninety) (u-over-5) (end) ) (define (inscribe letter deg) (penup) (setpos 0 0) (seth deg) (fd 337.5) (letter) ) (define x 0) (define y 0) (speed 500) (define (pikachu x) (define (curve length bends deg rl) (cond ((> length 0) (cond ((eq? rl 'right) (forward (/ length bends)) (right deg) (curve (- length (/ length bends)) (- bends 1) deg rl)) ((eq? rl 'left) (forward (/ length bends)) (left deg) (curve (- length (/ length bends)) (- bends 1) deg rl)) ) ) ) ) (start) ;right body (setheading 353) (forward 50) (curve (* x 1.45) 5 1 'left) (curve (- x (/ x 5)) 5 1 'left) (curve (/ x 3) 5 5 'left) (right 180) (curve (/ x 8) 3 6 'right) ;begin right ear (define (ear one two three) (setheading one) (curve x 15 1 'left) (curve (/ x 2) 5 1.5 'left) (curve (/ x 3) 5 1.5 'left) (setheading two) (curve (/ x 3) 5 1.5 'left) (curve (/ x 2) 5 1.5 'left) (curve (* three x) 15 1.5 'left) ) (ear 70 270 1.1) ;begin forehead (setheading 273) (curve (* x 1.75) 8 1 'left) ;begin left ear (ear 320 160 1.05) ;begin left body (setheading 200) (curve x 10 1 'left) (curve (* 0.9 x) 12 4 'left) (curve (/ x 1.5) 10 10 'right) (seth 180) (curve (/ x 2) 5 1 'left) (end) ; Recentering for Mouth (penup) (setheading 0) (forward (* 1.2 x)) (setheading 90) (forward (* 1.1 x)) ;Mouth (define (mouth y) (start) (setheading 110) ;bottom (curve (/ y 1.8) 17 2 'left) ;right (curve (/ y 5) 13 5 'left) (curve (/ y 2.75) 22 1 'left) ;top (curve (/ y 5) 14 5 'left) (curve (/ y 1.7) 22 1 'left) ;left (curve (/ y 6) 14 5 'left) (curve (/ y 4) 22 1 'left) ;reconnecting to bottom (curve (/ y 9) 3 5 'left) (end) ) (brown) (mouth (* x 0.7)) (seth 90) (forward 11) (seth 180) (forward 6) (pink) (mouth (* x 0.6)) ;Following Not Scalable or Translatable ;Cheek Left (define (cheek x y) (color "#a85b41") (ellipse x y 30 27 0) (red) (ellipse x y (* 0.85 30) (* 0.85 27) 0) ) (cheek -145 -90) ;Cheek Right (cheek 100 -85) ;Nose (brown) (ellipse -35 -65 15 6 0) ;Left Eye (define (eye x y) (color "black") (ellipse x y 18 21 0) (brown) (ellipse x y (* 0.85 18) (* 0.85 21) 0) ) (eye -105 -15) ;Left Pupil (define (pupil x y) (setpos x y) (color "#a3a29c") (start) (circle 7) (end) (setpos x y) (white) (start) (circle (* 0.85 7)) (end) ) (pupil -116 -10) ;Right Eye (eye 50 -15) ;Right Pupil (pupil 39 -10) (setheading 0) (setpos 0 0) ) (define (set x y theta) (setpos x y) (seth theta)) (define (draw) (hideturtle) (penup) (define (UCLA x y) (set (+ x -1130) (+ y 10) 0) (UU 500) (set (+ x -630) (+ y 10) 0) (C 500) (set (+ x 640) (+ y 10) 0) (L 500) (set (+ x 1140) (+ y 10) 0) (A 500)) (color "#ffd338") (UCLA -10 -10) (UCLA 10 10) (UCLA -10 10) (UCLA 10 -10) (color "#4286f4") (UCLA 0 0) (set 0 0 0) (draw-ring gold x y 0 500) (white) (setpos -250 -250) (draw-ring blue x y 460 500) (draw-ring black x y 495 502.5) (draw-ring black x y 460 465) (draw-dots white x y 0 75 75) (setpos 207 -317) (brown) ;outerchu (pikachu 120) (setpos 195 -305) ;innerchu (color "#ffeb7f") (pikachu 122) (draw-ring blue x y 300 375) (draw-ring black x y 370 375) (draw-ring black x y 300 305) (white) (define (dot) (start) (circle 8) (end)) (inscribe dot 168) (inscribe I 179) (inscribe hash 185) (inscribe dot 200) (inscribe T 210) (inscribe H 218) (inscribe E 226) (inscribe dot 236) (inscribe (lambda () (UU 35)) 244) (inscribe N 252) (inscribe I 258) (inscribe V 264) (inscribe E 272) (inscribe R 280) (inscribe S 288) (inscribe I 294) (inscribe T 300) (inscribe YY 308) (inscribe dot 318) (inscribe O 326) (inscribe F 334) (inscribe dot 344) (inscribe (lambda () (C 35)) 354) (inscribe (lambda () (A 35)) 1) (inscribe (lambda () (L 35)) 8) (inscribe I 14) (inscribe F 20) (inscribe O 28) (inscribe R 36) (inscribe N 44) (inscribe I 50) (inscribe (lambda () (A 35)) 56) (inscribe dot 66) (inscribe (lambda () (L 35)) 74) (inscribe O 82) (inscribe S 90) (inscribe dot 100) (inscribe (lambda () (A 35)) 108) (inscribe N 116) (inscribe G 124) (inscribe E 132) (inscribe (lambda () (L 35)) 140) (inscribe E 148) (inscribe S 156) (blue) (set -50 220 0) (C 30) (set -10 220 0) (A 30) (set -10 163 0) (I) (set -10 143 0) (I) (set -10 135 0) (V) (set 30 220 0) (L 30) (exitonclick)) ; Please leave this last line alone. You may add additional procedures above ; this line. (draw)