home *** CD-ROM | disk | FTP | other *** search
- ;
- ; Minimal demos of new turtling routines
- ; ams 31/7/94
- ; LPFC Software
- ;
-
- ; clunky way to draw squares
- (define (square n)
- (begin
- (forward n)
- (turn 90)
- (forward n)
- (turn 90)
- (forward n)
- (turn 90)
- (forward n)
- ))
-
- (define (ft)
- (lambda () (begin (forward 100) (turn 90))))
-
- ;
- ; minimal repeat type command
- ;
- (define (repeat e n)
- (if (= 0 n)
- '()
- (begin
- (e)
- (repeat e (- n 1))
- )))
- ;
- ; to try `repeat' >
- ; (repeat (ft) 4)
- ;
- (define (triangle n)
- (repeat (lambda () (begin (forward n)(turn 120))) 3))
-
- ;
- ; draw an object having `n' sides, with each side being `ls' long
- ; note inefficient - should use a (let ...) for the angle calculation
- ; (or memoise it..)
- ;
- (define (n-obj n ls)
- (repeat
- (lambda ()
- (begin
- (forward ls)
- (turn (trunc (- 360 (/ 360 n))))
- ))
- n))
- ;
- ; Hit escape to stop this - basically to prove our plotting isn't lossy...
- ;
- (define (demo-square)
- (begin
- (square 100)
- (demo-square)
- ))
-
- (define (hex n)
- (begin
- (forward n) (turn 60)
- (forward n) (turn 60)
- (forward n) (turn 60)
- (forward n) (turn 60)
- (forward n) (turn 60)
- (forward n)
- ))
-
- (define (trunc f) (inexact->exact (floor f)))
-
- (define (koch d s)
- (begin
- (if (= 0 d)
- (forward s)
- (begin
- (koch (- d 1) (trunc (/ s 3))) (turn -60)
- (koch (- d 1) (trunc (/ s 3))) (turn 120)
- (koch (- d 1) (trunc (/ s 3))) (turn -60)
- (koch (- d 1) (trunc (/ s 3)))
- ))
-
- ))
-
- (define (flake d s)
- (begin
- (koch d s)(turn 120)
- (koch d s)(turn 120)
- (koch d s)(turn 120)
- ))
-
- (define (dragon d s)
- (if (= d 0)
- (forward s)
- (if (> d 0)
- (begin
- (dragon (- d 1) (trunc s))
- (turn 90)
- (dragon (- 0 (- d 1)) (trunc s))
- )
- (begin
- (dragon (- 0 (+ d 1)) (trunc s))
- (turn 270)
- (dragon (+ d 1) (trunc s))
- )
- )
- ))
-
-
- ;; try (rightkoch 5 500)
- (define (rightkoch d s)
- (if (= d 0)
- (forward s)
- (begin
- (rightkoch (- d 1) (trunc (/ s 3))) (turn -90)
- (rightkoch (- d 1) (trunc (/ s 3))) (turn 90)
- (rightkoch (- d 1) (trunc (/ s 3))) (turn 90)
- (rightkoch (- d 1) (trunc (/ s 3))) (turn -90)
- (rightkoch (- d 1) (trunc (/ s 3)))
- )))
-
- (define (ccurve d s)
- (if (= d 0)
- (forward s)
- (begin
- (ccurve (- d 1) (trunc s)) (turn 90)
- (ccurve (- d 1) (trunc s)) (turn -90)
- )))
-