;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; NAME: ccurve-dragon-anim.scm ;; ;; DESCRIPTION: An example of the ccurve-dragon 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/2 (/ 1 2 ))) (eval '(define -1/2 (/ -1 2 ))) (eval '(define 1/20 (/ 1 20))) (eval '(define 1/10 (/ 1 10))))) ;;;;;;;;;;;;;;;;;;; ;; c-curve/dragon-anim ;; ;; Input: P1 [P] "Locked Starting point" ;; P2 [P] "Locked Ending point" ;; level [float] "recursion iteration level" ;; dragon? [bool] #t = dragon, #f = c-curve ;; Side-Effect: Draw the c-curve/dragon from P1 to P2 ;; at "level" recursion depth ;;;;;;;;;;;;;;;;;;; (define (c-curve/dragon-anim P1 P2 level dragon?) (if (< level 1) ;; Animate based on fraction above level (let* ((Pm (coord P1 P2 (mP -1/2 1/2))) (P12 (avgP P1 P2)) (Pt (lin-interpP P12 Pm (- level (truncate level))))) (draw-lineP P1 Pt) (draw-lineP Pt P2)) ;; Just do recursive call (let ((Pm (coord P1 P2 (mP -1/2 1/2)))) (c-curve/dragon-anim P1 Pm (- level 1) dragon?) (if dragon? (c-curve/dragon-anim P2 Pm (- level 1) dragon?) (c-curve/dragon-anim Pm P2 (- level 1) dragon?))))) ;;;;;;;;;;;;;;;;;;; ;; demo-c-curve/dragon-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-c-curve/dragon-anim step max-level dragon? filename animate?) (grow-fractal (lambda (i) (c-curve/dragon-anim (mP (/ *L* 2) (/ *D* 4)) (mP (/ *R* 2) (/ *D* 4)) i dragon?)) step max-level filename animate?)) ;(demo-c-curve/dragon-anim 1/4 13 #t "" #f) ;; just step ;(demo-c-curve/dragon-anim 1/10 13.04 #t "dragon" #t) ;; write to file (demo-c-curve/dragon-anim 1/10 13.04 #t "" #t) ;; just animate