Gymnasium Löbau/Vertiefungsklasse 2014/Eine Turtle zeichnet

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
== Wie zeichnet eine Turtle? ==

Wir stellen uns vor: Eine kleine Schildkröte (engl. turtle) besitzt am Bauch einen Zeichenstift und gehorcht aufs Wort!<br />
Diese Schildkröte kann sich auf einer Spielwiese tummeln, die wir als Zeichenfläche (engl. canvas) bezeichnen.

<canvas w="400" h="300"></canvas>

<code id="5aec36a5308e3" hidden>
function center(turtle) {
 turtle.move(200, 150);
}

function black(turtle) {
 turtle.penColor(0, 0, 0);
}

function red(turtle) {
 turtle.penColor(255, 0, 0);
}

function brown(turtle) {
 turtle.penColor(100, 50, 0);
}

function orange(turtle) {
 turtle.penColor(255, 100, 0);
}

function yellow(turtle) {
 turtle.penColor(255, 200, 0);
}

function green(turtle) {
 turtle.penColor(0, 255, 0);
}

function blue(turtle) {
 turtle.penColor(0, 0, 255);
}

function pink(turtle) {
 turtle.penColor(200, 50, 200);
}
</code>

Da es mehrere "schlaue" Schildkröten und mehrere Spielwiesen gibt, geben wir jeder Schildkröte und jeder Spielwiese eine Nummer.<br />
Nun setzen wir die Schildkröte mit der Nummer 1 auf die erste Spielwiese:

<run id="5aec36a530bdd">
canvas1.clear();
turtle1.move(200, 150);
</run>

Damit können wir der ersten Turtle einfache Zeichenbefehle in kurzen "Schildkröten-Sätzen" erteilen. Diese Sätze beginnen stets mit einer Anweisung und enden stets mit einem Semikolon.

<code id="5aec36a53098a" hidden>canvas1.clear();turtle1.move(200, 150);</code>

<run id="5aec36a530c66">
turtle1.forward(100);
</run>

Hier findest du eine [[Gymnasium Löbau/Vertiefungsklasse 2014/Eine Turtle zeichnet/Übersicht über alle Turtle-Befehle|Übersicht über alle Turtle-Befehle]].

=== Aufgaben ===

<ol>
<li>Zeichne mit der Turtle ein Quadrat.</li>
<li>Zeichne mit der Turtle ein Rechteck, dessen längere Seiten genau doppelt so lang sind wie seine kürzeren Seiten.</li>
</ol>

== Die Turtle baut ein Haus ==

Selbst die schönste Spielwiese schützt nicht vor Regenwetter! Die Turtle mit der Nummer 2 hat das erkannt und möchte auf ihrer Spielwiese ein Haus bauen. Baupläne für kostengünstige Häuser hat sie bereits im Internet gefunden.

<table border="0" cellspacing="0" cellpadding="2" width="600">
<tr>
<td rowspan="2" valign="top">
<canvas w="400" h="400"></canvas>
</td>
<td align="center" valign="top">
[[Bild:Haus1.GIF]]<br />
Bauplan: Turtle-Haus
</td>
</tr>
<tr>
<td align="center" valign="top">
[[Bild:Nikolaus1.GIF]]<br />
Bauplan: Nikolaus-Haus
</td>
</tr>
</table>

Hilf der Turtle 2 beim Hausbau!

<code id="5aec36a530a18" hidden>
function haus(turtle, s) {
 turtle.move(200, 200);
 turtle.penUp();
  turtle.backward(s / 2);
  turtle.left(90);
  turtle.forward(s / 2);
  turtle.right(90);
 turtle.penDown();
 turtle.forward(s);
 turtle.right(45);
 red(turtle);
 turtle.forward(s / Math.sqrt(2));
 turtle.right(90);
 turtle.forward(s / Math.sqrt(2));
 black(turtle);
 turtle.right(45);
 turtle.forward(s);
 turtle.right(90);
 turtle.forward(s);
 turtle.right(90);
}
 
function nikolaushaus(turtle, s) {
 turtle.move(200, 200);
 turtle.penUp();
  turtle.backward(s / 2);
  turtle.left(90);
  turtle.forward(s / 2);
  turtle.right(90);
 turtle.penDown();
 turtle.forward(s);
 turtle.right(45);
 red(turtle);
 turtle.forward(s / Math.sqrt(2));
 turtle.right(90);
 turtle.forward(s / Math.sqrt(2));
 black(turtle);
 turtle.right(135);
 turtle.forward(s);
 turtle.left(135);
 turtle.forward(s * Math.sqrt(2));
 turtle.right(135);
 turtle.forward(s);
 turtle.right(135);
 turtle.forward(s * Math.sqrt(2));
 turtle.right(135);
 turtle.forward(s);
}
</code>

<run id="5aec36a530ce5">
canvas2.clear();
turtle2.move(200, 200);
turtle2.forward(100);
//Hier stehen Deine weiteren turtle-Anweisungen!
</run>

=== Aufgaben ===

<ol>
<li>
Zeichne mit der Turtle nun das Nikolaus-Haus in einem Zug. Benutze dabei für das Dach eine andere Farbe.<br />
'''Hinweise:'''
* Zeichne zuerst auf einem Blatt Papier ein Nikolaus-Haus in einem Zug.
* Überlege Dir genau, wie sich die Turtle beim Zeichnen bewegen muss. 
* Denke daran: Die Diagonalen sind doppelt so lang wie die Dachkanten.
</li>
</ol>

== Die Turtle zeichnet regelmäßige Vielecke ==

Du hast bereits mit der Turtle ein Quadrat gezeichnet. Ein Quadrat ist ein regelmäßiges Viereck.<br />
Die dritte Turtle hat in der Schildkrötenschule besonders gut aufgepasst. Sie hat gelernt, wie man regelmäßige Vielecke auf die Spielwiese zeichnet. Probiere es aus.

<canvas w="400" h="400"></canvas>

<code id="5aec36a530a9f" hidden>
function vieleck(turtle, s, n) {
 var winkel = 360 / n;
 for (var i = 1; i <= n; i++) {
  turtle.forward(s);  
  turtle.right(winkel); 
 }
}
</code>

<run id="5aec36a530d68">
canvas3.clear();
turtle3.move(200, 200);
vieleck(turtle3, 75, 5);
</run>

Hast Du es bemerkt?
* Die erste Zahl entspricht der Seitenlänge des Vielecks.
* Die zweite Zahl gibt die Anzahl der Ecken an.

=== Aufgaben ===

<ol>
<li>Zeichne ein regelmäßiges 12-Eck. Achte darauf, dass es auf die Spielwiese passt!</li>
<li>Kannst Du mit der Turtle einen Kreis zeichnen?</li>
</ol>

== Die Turtle zeichnet Sterne ==

Die vierte Turtle ist eine wahre Künstlerin! Sie kann Sterne zeichnen, die sie meist zur Weihnachtszeit verschenkt.
Du wirst staunen!

<canvas w="400" h="400"></canvas>

<code id="5aec36a530b2c" hidden>
function stern(turtle, s, n) {
 var winkel = 360 / n;
 for (var i = 1; i <= n; i++) {
  vieleck(turtle, s, 4);
  turtle.right(winkel); 
 }
}

function n_stern(turtle, s, n, m) {
 var winkel = 360 / n;
 for (var i = 1; i <= n; i++) {
  vieleck(turtle, s, m);
  turtle.right(winkel); 
 }
}

function farbstern(turtle, s, n, liste) {
 var winkel = 360 / n;
 var farbe;
 for (var i = 1; i <= n; i++) {
  farbe = liste[Math.floor((i - 1) * liste.length / n)];
  switch (farbe) {
   case "red":
    red(turtle); break;
   case "brown":
    brown(turtle); break;
   case "orange":
    orange(turtle); break;
   case "yellow":
    yellow(turtle); break;
   case "green":
    green(turtle); break;
   case "blue":
    blue(turtle); break;
   case "pink":
    pink(turtle); break;
   default:
    black(turtle); break;
  }
  vieleck(turtle, s, 4);
  turtle.right(winkel);
 }
}
</code>

<run id="5aec36a530ded">
var farbliste = ["red", "orange", "yellow", "green", "blue", "pink"];

canvas4.clear();
turtle4.move(200, 200);
stern(turtle4, 100, 35);
</run>

Du hast die "Zeichenstrategie" der Turtle sicher durchschaut: Sie zeichnet ein Quadrat und dreht sich anschließend ein kleines Stück nach rechts. Das wiederholt sie so oft, bis der Stern komplett ist.

=== Aufgaben ===

<ol>
<li>Zeichne farbige Sterne.</li>
<li>Ändere neben der Farbe auch die Anzahl der Quadrate, die für einen vollständigen Stern notwendig sind.</li>
<li>Zeichne ''mehrfarbige'' Sterne, z.B.:
<pre>farbstern(turtle4, 100, 100, farbliste);</pre>
</li>
</ol>