;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; NAME: sierpinski-square-alt-anim.scm ;; ;; DESCRIPTION: An example of the sierpinski square fractal animated. ;; Evaluate the entire file. ;; ;; AUTHOR: Dan Garcia - University of California at Berkeley ;; Copyright (C) Dan Garcia, 2001. All rights reserved. ;; ;; DATE: 2001-09-21 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; In stk, we need to define all the fractions we use in dr. scheme/macgambit (if *stk* (begin (eval '(define 1/4 (/ 1 4 ))) (eval '(define 1/3 (/ 1 3 ))) (eval '(define 2/3 (/ 2 3 ))) (eval '(define -1/3 (/ -1 3 ))) (eval '(define 1/20 (/ 1 20))) (eval '(define 1/10 (/ 1 10))))) ;;;;;;;;;;;;;;;;;;; ;; sierpinski-square-alt-anim ;; ;; Input: C [P] "Center" ;; r [float] "radius of square" ;; n [float] "recursion iteration level" ;; Side-Effect: Draw the sierpinski-square centered at C with radius r ;; at "n" recursion depth ;;;;;;;;;;;;;;;;;;; (define (sierpinski-square-alt-anim C r n) (define (ss-alt-helper P1 P2 level) (if (< level 1) ;; Animate based on fraction above level (let* ((t (- level (truncate level))) (P1m (coord P1 P2 (mP 0 1/3))) (P2m (coord P1 P2 (mP 0 2/3))) (P1mt (coord P1 P2 (mP (* t -1/3) 1/3))) (P2mt (coord P1 P2 (mP (* t -1/3) 2/3)))) (draw-poly-lineP P1 P1m P1mt P2mt P2m P2)) ;; Just do recursive call (let ((P1m (coord P1 P2 (mP 0 1/3))) (P2m (coord P1 P2 (mP 0 2/3))) (P1mu (coord P1 P2 (mP -1/3 1/3))) (P2mu (coord P1 P2 (mP -1/3 2/3)))) (ss-alt-helper P1 P1m (- level 1)) (ss-alt-helper P1m P1mu (- level 1)) (ss-alt-helper P1mu P2mu (- level 1)) (ss-alt-helper P2mu P2m (- level 1)) (ss-alt-helper P2m P2 (- level 1))))) (let ((SW (addP C (mP (- r) (- r)))) (SE (addP C (mP r (- r)))) (NE (addP C (mP r r ))) (NW (addP C (mP (- r) r )))) (ss-alt-helper SW SE n) (ss-alt-helper SE NE n) (ss-alt-helper NE NW n) (ss-alt-helper NW SW n))) ;;;;;;;;;;;;;;;;;;; ;; demo-sierpinski-square-alt-anim ;; ;; Input: dragon? [bool] #t = dragon, #f = c-curve ;; : step [float] how much to advance fractal each step ;; : filename [string] In stk, filename to save. If "", just display. ;; : max-level [float] The max recursion level ;; Side-Effect: Animate c-curve/dragon through 'step' steps ;;;;;;;;;;;;;;;;;;; (define (demo-sierpinski-square-alt-anim step max-level filename animate?) (grow-fractal (lambda (i) (sierpinski-square-alt-anim *C* (- *Radius* 1) i)) step max-level filename animate?)) ;(demo-sierpinski-square-alt-anim 1/10 4.09 "ssa" #t) ;; write to file ;(demo-sierpinski-square-alt-anim 1/4 4 "" #f) ;; just step (demo-sierpinski-square-alt-anim 1/10 4.09 "" #t) ;; just animate