Schritt 7: Erweiterte Schildkröte zeichnen
Links(), Rechts(), schaffen und down() Methoden für die Schildkröte ist einfach. Aber für einige Zeichnungen benötigen wir anspruchsvollere 3D-Steuerung. Beispielsweise empfiehlt es sich, einen Donut 45 Grad nach oben geneigt zu zeichnen. Es ist verlockend, nehmen das Glas-Donut-Skript aus dem vorherigen Schritt, und fügen Sie vor der Schleife:
Aber das führt zu einem unerwartetes Ergebnis--siehe Bild. Der Grund dafür ist, dass die Schildkröte sich die ganze Zeit klettern wird, während die d.left()-Methode, die es um die Hochachse dreht, und so erhalten Sie eine Spirale.
Stattdessen, was wir tun müssen, ist Rotatins gieren, nicken und Rollen der Schildkröte. Siehe das Bild von der NASA (US Regierungsarbeiten sind Public Domain) erklären, wie die drei Winkel gehen, und nur vorstellen, dass das Flugzeug Ihrer Schildkröte ist. (Leider, aufgrund von Minecraft Einschränkungen der Rollwinkel wirkt sich nicht wie die Schildkröte aussieht oder dem Gesichtspunkt aus, die Sie anzeigen.) Was wir tun müssen, um unsere seitwärts Donut zu zeichnen ist, zuerst unsere Schildkröte um 45 Grad mit t.roll(45), Rollen und dann beim Zeichnen des Donut verwenden t.yaw(-angle) anstelle von t.left(angle). Der überarbeitete Kodex ist in der Abbildung.
Schön über die Gier/Nick-/Roll Drehungen ist, dass sie immer relativ wo die Schildkröte zeigt, während links() und rechts() bezogen auf die Minecraft-Welt sind.
Schließlich ist hier ein wesentlich Erweitertes Beispiel. Ziehen wir einen Baum. Dies beinhaltet eine rekursive Funktion. Beginnen Sie mit dies zu gewährleisten, dass die Zeichnung so schnell wie möglich fertig ist
Nun tun wir unseren Baum rekursive Funktion. Die Grundidee dahinter ist, dass ein Zweig nur ein kleiner Baum ist. So stellen wir eine Funktion, die einen Zähler und einen Abzweig Länge nimmt. Der Zähler gibt an, wie viele Iterationen der Baum gehen wird. Zum Beispiel Zähler = 1 bedeutet nur der Stamm gezogen werden, und Zähler = 1 bedeutet den Stamm und eine Reihe von Niederlassungen erstellt werden.
Zuerst prüft der Code wenn unsere Zähler auf Null gelaufen. Wenn ja, haben wir nicht etwas zu zeichnen. Dann ziehen wir einen Stamm. Dann ziehen wir vier Zweige kleben aus ihm heraus mit einer einfachen Schleife. Um dieses Stück Code zu entwerfen, stell ich mich als die Schildkröte haben nur entlang des Rumpfes nach oben verschoben. Um den Zweig zu zeichnen, ich mein selbst oben kippen, um 30 Grad (z.B. t.pitch(30)) und zeichnen Sie einen neuen Baum kleiner: der Zähler ist weniger von einem, und sein Stamm werden 3/4 der Länge von meinem aktuellen Trunk. Ich denke Neigung mich wieder nach unten um 30 Grad. Ich mich um 90 Grad drehen und die Übung wiederholen. Schließlich, sobald ich mit den Zweigen fertig bin, gehe ich wieder Stamm.
Schließlich brauche ich nur diesen Code aufrufen. Ich will einen Baum mit einer Theke von 6 und eine anfängliche Astlänge 20 machen. Und für eine gute Maßnahme, I'l aus Holz, und machen natürlich senkrecht nach oben:
Dieses Fraktal-Baum sieht nicht sehr realistisch. Sollten wir den dicken Stamm und die Äste werden dünner und dünner, wie sie nach außen gehen (sagen, halb so dick, zu erhalten, bis sie zu einen einzigen Block erreichen), und wir sollten aus Holz lässt Blöcke zu wechseln, wie wir ausgehen. Aber vor allem echte Bäume sind nicht so regelmäßig. Wir brauchen einige Zufälligkeit. Die einfachste Form der Zufälligkeit soll nur jeder Zweig geben eine Chance nicht zu wachsen, zu sagen, eine Chance von 20 %. All dies in meinem fancytree.py Skriptreali- Die daraus resultierende Baum sucht nach etwas durch ein relativ einfaches Stück Code produziert überraschend realistisch. Ein lustiger Nebeneffekt wie ich es umgesetzt ist, dass es eine 20 % Chance, dass nichts – d. h. gezeichnet wird, der Baum hat eine Chance zu wachsen, die was auch realistisch ist. Und jedes Mal, wenn Sie das Skript ausführen, erhalten Sie etwas anderes.
Ein weiteres nützliches Feature von der Schildkröte Zeichenklasse ist nicht nur Linien aber polygonalen Flächen zeichnen zu können. Um dies zu tun, nur nicht t.startface(), Ihre Oberfläche zu ziehen, und dann t.endface(). Sobald Sie im Gesicht-Modus sind, jedes Mal, wenn Sie eine Linie zeichnen, der Code tatsächlich zeichnet ein Dreieck: ein Scheitelpunkt ist der Punkt der Schildkröte wurde als t.startface() genannt wurde und die Linie ist die gegenüberliegende Kante. Dies zieht ein Fünfeck auf die Seite gekippt um 45 Grad: