;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; NAME: rotater-examples.scm ;; ;; DESCRIPTION: 3D Rotater Examples ;; ;; AUTHOR: Dan Garcia, Ph.D. - University of California at Berkeley ;; Copyright (C) Dan Garcia, 2001. All rights reserved. ;; ;; DATE: 2001-10-13 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; C-CURVE / DRAGON LAYERED FRACTALs ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;; ;; c-curve/dragon3 ;; Input: P1 [P3] "Starting point" ;; P2 [P3] "Ending point" ;; level [int] "Fractal level" ;; color [int] "Color for this level" ;; dragon? [boolean] "Dragon curve or C-curve?" ;; Side-Effect: Draw c-curve or dragon fractal at recursion level, color P1->P2 ;;;;;;;;;;;;; (define (c-curve/dragon3 P1 P2 level color dragon?) (if (= level 0) (draw-lineP3 P1 P2 color) (let ((Pm (coord3 P1 P2 *Pnegz_heaven* (mP3 -1/2 0 1/2)))) (c-curve/dragon3 P1 Pm (- level 1) color dragon?) (if dragon? (c-curve/dragon3 P2 Pm (- level 1) color dragon?) (c-curve/dragon3 Pm P2 (- level 1) color dragon?))))) ;;;;;;;;;;;;; ;; write-c-curve/dragon-layers ;; Input: dragon? [boolean] "Dragon curve or C-curve?" ;; Side-Effect: Write layered dragon or c-curve to Rotater file ;;;;;;;;;;;;; (define (write-c-curve/dragon-layers dragon?) (write-rotater (if dragon? "LayeredDragon.rot" "LayeredCCurve.rot") ; my-draw-proc (lambda (i) (for-each (lambda (n) (let ((z-offset (* (/ 100 3) n))) (c-curve/dragon3 (addP3 *BW* (mP3 0 0 z-offset)) (addP3 *BE* (mP3 0 0 z-offset)) n (color-level n) dragon?))) '(0 1 2 3 4 5 6))) 0 (if dragon? "Layered Dragon Fractal" "Layered C-Curve Fractal") "2001-10-10" "Dan Garcia (ddgarcia@cs.berkeley.edu)" "http://www.cs.berkeley.edu/~ddgarcia/")) ;; Actually write the file! ;; (write-c-curve/dragon-layers #f) (write-c-curve/dragon-layers #t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; CIRCLES / CUBIESs ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;; ;; draw-circlies-cubies ;; Input: Porigin [P3] "point simulating origin" ;; Pz [P3] "point simulating the point [0,0,1]" ;; Pydir [P3] "point NOT collinear with (Porigin,Pz) in y-direction" ;; n [int] "Recursion level" ;; sides [int] "Samples of the circle for circlies" ;; cubies? [boolean] "Cubies or circlies?" ;; Side-Effect: Draw embedded circlies or cubies ;;;;;;;;;;;;; (define (draw-circlies-cubies Porigin Pz Pydir n sides cubies?) (if cubies? (draw-cubeP3 Porigin Pz Pydir (color-level n)) (draw-cube-arcP3 Porigin Pz Pydir sides (color-level n))) (if (= n 0) 'done (let ((Pznew (coord3 Porigin Pz Pydir (mV .5 .5 .5))) (Pydirnew (coord3 Porigin Pz Pydir (mV 0 1 1)))) (draw-circlies-cubies Porigin Pznew Pydirnew (- n 1) sides cubies?)))) ;;;;;;;;;;;;; ;; write-circlies-cubies ;; Input: sides [int] "Samples of the circle for circlies" ;; dragon? [boolean] "Dragon curve or C-curve?" ;; Side-Effect: Write layered dragon or c-curve to Rotater file ;;;;;;;;;;;;; (define (write-circlies-cubies sides cubies?) (write-rotater (if cubies? "cubies.rot" "circlies.rot") (lambda (i) (draw-circlies-cubies (mP3 0 0 0) (mP3 0 0 100) (mP3 0 1 0) i sides cubies?) ) 7 (if cubies? "Embedded Cubies" "Embedded Circlies") "2001-10-13" "Dan Garcia (ddgarcia@cs.berkeley.edu)" "http://www.cs.berkeley.edu/~ddgarcia/")) ;; Actually write the file! ;; (write-circlies-cubies 32 #t) (write-circlies-cubies 32 #f)