(define env (turtles 500 300)) ;;;---------Pentagon------------- ;; one-pentagon-side: number snapshot --> snapshot ;; Return an after-snapshot which is like "env", ;; except that it has a one side of a pentagon drawn, of size length, ;; along with the 72-degree turn. (define (one-pentagon-side length env) (turn 72 (draw length env))) ;; many-pentagon-sides: WholeNum snapshot --> snapshot ;; returns a snapshot with n sides of a pentagon drawn ;; given the initial snapshot "env" (define (many-pentagon-sides n length env) (if (zero? n) env (many-pentagon-sides (sub1 n) length (one-pentagon-side length env)))) ;;draw-pengtagon: number snapshot --> snapshot ;;draws a regular pentagon, each side being of length "length" ;;takes an initial snapshot and returns another snapshot ;;with the pentagon (define (draw-pentagon length env) (many-pentagon-sides 5 length env)) ;;testing! (draw-pentagon 80 env) ;;concentric-pentagons: WholeNum number number snapshot --> snapshot ;;Draws "number" concentric pentagons with the length of one side ;;of the inner-most pentagon being of size "length". The spacing ;;between each pentagon is determined by the variable "spacing", ;;the length between each pentagon, measured from angle point to ;;to next angle point. (define (concentric-pentagons number spacing length env) (if (zero? number) env (concentric-pentagons (sub1 number) spacing (+ (* 0.587785 spacing 2) length);; cos of 54deg =~ .587785 (turn 126 (move spacing (turn -126 (draw-pentagon length env))))))) (concentric-pentagons 8 10 50 env) ;;----------Koch curve------------- ;; koch: natNum number snapshot --> snapshot ;; draws a koch curve of level levels deep, ;; a distance of length, based ;; on the snapshot env. It returns a new snapshot. (define (koch level length env) (if (zero? level) (draw length env) (koch (sub1 level) (/ length 3) (turn 60 (koch (sub1 level) (/ length 3) (turn -120 (koch (sub1 level) (/ length 3) (turn 60 (koch (sub1 level) (/ length 3) env))))))))) ;;testing! (koch 6 200 env) ;;snowflake: WholeNum number --> snapshot ;;draws a snowflake of the given level and size (define (snowflake level size) (koch level size (turn -120 (koch level size (turn -120 (koch level size (turn 180 (move (/ size 2) (turn 180 (turtles (* 2 size) (* 2 size))))))))))) ;;testing (snowflake 3 100)