Scheme Turtle
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language> ==Turtle Geometrie== Die Turtle Geometrie ist aus der Programmiersprache LOGO sehr gut bekannt. Es handelt sich um eine koordinatenfreie Geometrie. Die Idee besteht darin, einen kleinen Zeichenroboter, dargestellt als Schildkröte (Turtle genannt), mit bestimmten Befehlen zu steuern. Da die Turtle am Bauch einen 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 der Turtle verändert werden. ===Zeichenfläche=== Als erstes benötigen wir eine "Spielwiese", auf der sich unsere Turtle tummeln kann. Das folgende Rechteck zeigt dieses Areal, das auch als Zeichenfläche (Canvas, auch Leinwand) bezeichnet wird. Die folgende Zeichenfläche zeigt die Canvas-Standardgröße. <canvas></canvas> <popup name="Info zu Canvas-Größe"> Hinweis für Autoren einer solchen Wiki-Seite: Mit den Attributen <tt>width</tt> und <tt>height</tt> werden die Breite und Länge explizit festgelegt. <br/> Beispiel: <nowiki><canvas width=300 height=200></canvas></nowiki> <br/> Koordinaten beziehen sich auf ein <tt>x</tt>-<tt>y</tt>-System, dessen Ursprung in der linken oberen Ecke liegt. Die Abszissenachse verläuft nach rechts, die Ordinatenachse nach unten. Mit <nowiki>(move turtle x y)</nowiki> kann man eine Turtle auch auf einen bestimmten Punkt <tt>(x,y)</tt> bewegen. </popup> Auf diese Zeichenfläche setzen wir nun eine Turtle. <run id="4b40587e614de"> (clear canvas) (home turtle) </run> Der Befehl ''home'' setzt die Turtle etwa in die Mitte der Zeichenfläche. Wenn uns die aktuelle Turtle-Position nicht gefällt, bewegen wir die Turtle auf einen anderen Platz. ===Turtle-Bewegungen=== <code id="4b40587e6015c" hidden>(home turtle)</code> <run id="4b40587e61cad"> (forward turtle 50) </run> lässt die Turtle 50 Schritte vorwärts laufen. Analog gilt dies auch für ''backward'' (rückwärts). Soll keine Spur gezeichnet werden, kann die Turtle den Stift anheben (und später wieder absenken). <code id="4b40587e6092b" hidden>(clear canvas)(home turtle)</code> <run id="4b40587e624ad"> (forward turtle 20) (penup turtle) (forward turtle 20) (pendown turtle) (forward turtle 30) </run> Da die Zeichenfläche nun den sichtbaren Bereich dieser Seite verlässt, brauchen wir entweder eine neue Wiki-Seite oder auf dieser hier eine neue Zeichenfläche. Wir platzieren hier eine weitere Canvas. Da es sich um die zweite Zeichenfläche auf dieser Seite handelt, wird sie mit <tt>canvas2</tt> angesprochen. Die zugehörige Turtle heißt <tt>turtle2</tt>. Möchten wir die obere (erste) Turtle ansprechen, so geschieht dies mittels <tt>turtle1</tt> bzw. <tt>canvas1</tt>, auch ohne der angefügten 1, wie oben praktiziert. <canvas></canvas> Auf <tt>canvas2</tt> sitzt also <tt>turtle2</tt>. Allgemein sitzt auf <tt>canvas_n</tt> die Turtle <tt>turtle_n</tt>. Je Zeichenfläche gibt es genau eine Turtle. Der größte Wert für n ist 5. <popup name="Info zu Canvas/Turtle-Anzahl"> Werden mehr als 5 Zeichenflächen benötigt, kann man diese nach folgendem Muster - etwa als hidden code - definieren. <br/> <nowiki>(define canvas6 (java-new <canvas> (->jint 6)))</nowiki> <br/> <nowiki>(define turtle6 (java-new <turtle> (->jint 6)))</nowiki> </popup> In folgendem Beispiel kommen Drehbewegungen (um einen bestimmten Winkel) und Vorgaben für Linienstärken und deren Farbe hinzu. <run id="4b40587e63056"> (clear canvas2) (home turtle2) (penwidth turtle2 5) (pencolor turtle2 255 0 0) (forward turtle2 50) (right turtle2 90) (pencolor turtle2 255 255 0) (forward turtle2 50) (right turtle2 90) (pencolor turtle2 0 255 0) (forward turtle2 50) (right turtle2 90) (pencolor turtle2 0 0 255) (forward turtle2 50) (hide turtle2) </run> Am Arbeitsende wird die Turtle mittels <tt>hide</tt> versteckt. Mit <tt>show</tt> kann sie wieder sichtbar gemacht werden. [[Scheme Turtle 2]]