Scheme Turtle

Aus ProgrammingWiki
Archivierte Version vom 2008-12-13T09:56:04+00:00. Aktuelle Version

Turtle Geometrie

Die aus der Programmiersprache LOGO bekannte Turtle Geometrie ist eine koordinatenfreie. Die Idee besteht darin, einen kleinen Zeichenroboter, dargestellt als Schildkröte, mit bestimmten Befehlen zu steuern. Da die Turtle ein Stift besitzt, kann sie bei ihren Bewegungen eine Spur hinterlassen. Das Schildkrötensymbol lässt die jeweils aktuelle Blickrichtung der Turtle erkennen. Die Vorwärts/Rückwärts-Bewegungen finden in dieser Blickrichtung statt. Diese kann durch Rechts/Links-Drehungen verändert werden.

Zeichenfläche

Als erstes benötigen wir eine "Spielwiese", auf der sich unsere Turtle tummeln kann.

Ihr Browser unterstützt Canvas nicht.

Darauf setzen wir die Turtle.

<eval> (home turtle) </eval>


(clear canvas) (home turtle)

(penwidth turtle 5) (pencolor turtle 255 0 0) (forward turtle 50) (right turtle 90) (forward turtle 50) (right turtle 90) (pencolor turtle 0 0 255) (forward turtle 50) (right turtle 90) (forward turtle 50)

(define t (clone turtle)) (hide t) (forward t 50) (right t 90) (forward t 50) (show t) (setangleto t turtle)


<eval> (clear canvas2) (move turtle2 200 200)</eval>

(define tree

(lambda(side winkel) 
 (cond [(< side 4) #t] 
       [else  
         (penwidth turtle2 (+ (/ side 10) 1 ))    
         (forward turtle2 side)  
         (left turtle2 winkel)  
         (tree (/ side 2) winkel)  
         (left turtle2 winkel)  
         (tree (/ side 2) winkel)  
         (right turtle2 (* 4 winkel))  
         (tree (/ side 2) winkel)  
         (left turtle2 winkel)  
         (tree (/ side 2) winkel)  
         (left turtle2 winkel)  
         (backward turtle2 side)])))

(tree 100 25)

Ihr Browser unterstützt Canvas nicht.

Die folgende Prozedure tree verwendet einen Parameter für die turtle.

<eval> (clear canvas3) (move turtle3 200 200)</eval>

(define tree

(lambda(side turtle) 
 (cond 
   ((< side 2) #t)
   (else  
     (penwidth turtle (+ (/ side 10) 1 ))    
     (forward turtle side)  
     (left turtle 45)  
     (tree (/ side 2) (clone turtle))  
     (right turtle 90)  
     (tree (/ side 2) (clone turtle))  
     (left turtle 45)  
     (backward turtle side)))))

(tree 100 turtle3)

Ihr Browser unterstützt Canvas nicht.

Zur Erforschung echter Rekursion verwenden wir die Prozedur random-walk.

<eval> (define random</eval>

 (random-maker 19768116))  ;; Anfangswert verändern!

(clear canvas4) (move turtle4 200 310) (pencolor turtle4 0 0 200)

(define random-walk

 (lambda (angle length n turtle)
   (if (= n 0)
       ;(penerase turtle)
       (pencolor turtle4 220 0 0)
       (begin          
         (forward turtle length)
         (right turtle angle)
         (random-walk (+ 5 (random angle))(+ 5 (random length)) (- n 1) turtle)
         ;(sleep-for-a-while 0.01)
         (left turtle angle)
         (backward turtle length)))))

(random-walk 360 20 1000 turtle4)

Ihr Browser unterstützt Canvas nicht.