Python coding for Minecraft (8 / 17 schritt)

Schritt 8: L-System Fraktale mit Turtle-Grafik


Zeichnen Sie ein Dreieck. Jetzt nehmen Sie jede Zeile des Dreiecks und ersetzen Sie es durch eine Linie mit einer dreieckigen Beule am es. Den Vorgang wiederholen. Wie auf das animierte Bild (Public Domain, basierend auf



), erhalten Sie eine Koch-Schneeflocke.

Dies kann durch ein super-einfaches Turtle-Grafik-Programm modelliert werden. Stellen Sie sich vor, dass F bedeutet "vorwärts ziehen", und "+" und "-" drehen um 60 Grad gegen den Uhrzeigersinn und im Uhrzeigersinn, beziehungsweise. Dann das erste Dreieck durch gezogen werden kann:

Also, vorwärts gehen, rechts um 120 Grad drehen, dann gehen nach vorne, rechts um 120 Grad drehen, vorwärts gehen.

Die dreieckigen Beule Linie kann durch gezogen werden:

Also ist hier, wie wir eine Schneeflocke zu generieren. Wir nehmen die ersten Schildkröten F ++ F ++ F ein Dreieck zu zeichnen. Jedes F drin stellt eine Zeile. So ersetzen Sie jedes F von F-F ++ F-F. Wenn wir so weitermachen, erzeugen wir die Koch-Schneeflocke.

Dies ist ein einfaches Beispiel eines L-Systems. Die Idee hinter einem L-System ist, dass wir mit einer Reihe von Zeichen beginnen (in diesem Fall F ++ F ++ F), und dann eine Reihe von Regeln, wie man die Zeichen ändern (in diesem Fall die Regel um zu ersetzen F mit F-F ++ F-F) in jeder Iteration. Wir wenden diese ein paar Mal und wir bekommen eine recht komplizierte Zeichenfolge. Zum Beispiel nach zwei Iterationen in der Schneeflocke Fall erhalten wir:

Nach vier erhalten wir das Bild oben. ( Wirklich erreicht man ein Fraktal, die Linien mit jeder Iteration schrumpfen sollte, aber das wird nicht funktionieren, in Minecraft.)

Es gibt eine Menge wirklich gute Informationen in diesem kostenlosen PDF-Buch.

Ich schrieb eine sehr einfache lsystem.py -Modul. Um die Schneeflocke zu implementieren, beginnen Sie mit vorformulierten Text:

Jetzt müssen wir die Regeln definieren. Die Regeln mit einem Python-Wörterbuch:

Als nächstes definieren wir das Axiom oder Ausgangspunkt:

Schließlich müssen wir das System, was die einzelnen Symbole in den Streichern. Für verschiedene L-Systeme weisen wir verschiedene Bedeutungen zu ihnen (z. B. Rotationen durch verschiedene Winkel). Wir brauchen also einen zweiten Python Wörterbuch angeben, was für jedes Symbol gemacht wird. Wenn Sie eine Aktion für ein Symbol nicht angeben, wird das Symbol ignoriert, wenn es Zeit für die Schildkröte ist, die Ausgabe zu ziehen (aber es wichtig, für die Generation sein könnte). Die Bedeutungen sind durch ein Wörterbuch gegeben, die eine Funktion Aufruf für jedes Symbol gibt. Einzeilige Funktionen können mit dem Lambda -Operator angegeben werden. In diesem Fall sind alle Funktionen Einzeiler:

Schließlich rufen wir das L-System, wie viele Iterationen (in diesem Fall 4) angeben:

Es gibt einen speziellen Trick für einige L-Systeme. Diese L-Systeme sind Raster ausgerichtet, mit allen 90 Grad Drehungen. Die quadratischen Kurve (squarecurve.py) und Drachen Kurve (dragoncurve.py) sind schöne Beispiele. Der Trick ist zu nennen, irgendwo am Anfang des Codes:

Dies bewegt sich deine Schildkröte zu einem ganzzahligen Gitter Ort und richtet seine Überschrift zu einem Grid-Richtung. Danach bleibt die Schildkröte genau Raster ausgerichtet, wenn Sie es nur ganzzahlige Mengen bewegen (z. B. 7, nicht 7.1 und nicht einmal 7. oder 7.0 wie diese sind in Python Gleitkomma), und drehen Sie nur ganzzahlige Mengen, die Vielfache von 90 Grad (z. B.-180, oder 90, aber nicht 90,0 oder 45) sind. Der Drachen Kurve Code gibt auch ein Beispiel für eine vorwärts-Funktion, die ein bisschen komplizierter--statt nur einer Linie ist, es zieht eine Wand mit einer Öffnung drin.

Aufruf gridalign() kann tatsächlich, manchmal eine gute Idee sein, auch wenn nicht alle Ihre Winkel rechtwinklig sind. Sie erhalten wahrscheinlich einige Runden Probleme in ein großes Bild, aber es kann noch besser aussehen. Siehe das Spacefilling Kurve Beispiel (gerendert in lila Glasmalerei!).

L-Systeme müssen nicht zweidimensional sein. Sie können Symbole einschließen, die yaw, pitch und roll Drehungen. Für die Gestaltung von Bäumen, ein nützlicher Trick Stack-Befehle haben soll: "[" Zeichnung Stand auf einem Stapel speichern und "]" um sie zu reparieren. Dadurch wird die Schildkröte Modul push() und Pop -Methoden verwendet. Zum Beispiel, ist hier ein Ausschnitt der Code zum Zeichnen eines einfachen Baums (ltree.py):

Denken Sie an die L als ein Blatt (obwohl dieser einfache Code tatsächlich nicht das Blatt--, das dem Wörterbuch hinzugefügt werden müssten ziehen). Wir beginnen mit FL, das ist ein Stamm plus ein Blatt. Und wir ersetzen Sie jedes Blatt durch [^ FL] > [^ FL] > [^ FL]. Dies ist ein Satz von drei Filialen, jeweils um 20 Grad aus dem Kofferraum, 120 Grad auseinander gekippt. Die Klammern stellen sicher, dass nach jedem neuen ^ FL ist gezogen, wir sind wieder da wo wir davor waren. Dies wird wiederholt, so dass die Blätter an den Ästen durch Tripel Zweige ersetzt werden, und so weiter.

Ein realistischerer Baum hätte komplexeren Code für ' ['. Es könnte die nachfolgenden Zweige kürzer und dünner zu machen, und ihr Material zu ändern, da wir an die Blätter näher (und dann wieder auf "]"). Solch einen Baum als der Demo-Code schließe ich in lsystem.py, basierend auf Regeln (mit einigen Optimierungen) von Geeky Blogger.

Sie können auch Raster ausgerichtet 3D Dinge tun. Zum Beispiel hat hilbert.py eine 3D Hilbert-Kurve.

Zu guter Letzt möchten einige Randomisierung in die L-System-Regeln einführen. Bisher waren unsere Regeln deterministisch: eine einzelne Zeichenfolge wurde gegeben, die z. B. ein Symbol ersetzt 'F': ' F-F ++ F-F'. Aber anstelle einer einfachen Ersatz Zeichenkette kann man eine Python-Liste der Paare (p, String), wo p ist eine Wahrscheinlichkeit (von 0 bis 1) und String ist die Zeichenfolge, die mit dieser Wahrscheinlichkeit geben. Die Wahrscheinlichkeiten für eine bestimmte Quellsymbol hatte besser nicht fügen Sie bis zu mehr als 1, aber sie können summieren sich zu weniger als einem--in diesem Fall gibt es eine Chance, dass es keinen Ersatz. Hier ist zum Beispiel eine leicht randomisierte Version von geeky .blogger Baum:

Diese Regel hat eine 55 % ige Chance einen A durch ersetzen drei Filialstruktur und eine Chance von 25 % durch zwei Filialstruktur zu ersetzen. Dies ist nicht ganz zufällig--mehr Zufälligkeit Dinge noch realistischer machen. Ich lege einen Screenshot eines ziemlich spärlich Waldes nach dem Zufallsprinzip generiert mit dieser Regel (und zufällige Platzierung von Bäumen, unterliegt ein Mindestabstand).

In Verbindung stehende Artikel

Sommer-camp-Klasse auf Python Codierung mit Minecraft

Sommer-camp-Klasse auf Python Codierung mit Minecraft

Letzten Sommer habe ich gelernt einen fünftägiges 1,5 Stunden pro Tag Sommer camp Mini-Kurs auf Python-Programmierung mit Minecraft für begabte Kinder als Teil der Baylor University for Young People. Die meisten Kinder waren ein Teil des Projekts ver
Realen Welt Minecraft

Realen Welt Minecraft

Wir alle wissen- Minecraft ist ein fantastisches Spiel, und Raspberry Pi hat es mehr awesome. Mit der Minecraft-API können wir nun einfach Python-Skripten Schnittstelle lesen Welt Sensoren und Schaltflächen für die Minecraft-Welt schreiben.Schritt 1:
Raspberry Pi Internetradio mit Kolben

Raspberry Pi Internetradio mit Kolben

Dieses Tutorial soll Ihnen zeigen, wie Sie bauen einen Radio, der Audio aus dem Internet streamen kann über eine einfache Web-Oberfläche um zu bedienen. Wir benötigen Folgendes:Raspberry PiEinige Lautsprecher können Sie Ihre Raspberry Pi Haken bis zu
Smart-Garage, angetrieben von PcDuino

Smart-Garage, angetrieben von PcDuino

wie viele Male haben Sie Gefahren Weg von Haus und Frage mich, wenn Sie Ihre Garage, oder nicht geschlossen haben?Hier präsentieren wir eine intelligente Garage durch PcDuinoangetrieben. Die Garage benachrichtigt Sie per e-Mail, wenn das Tor offen ge
Fahrrad-Blinker aus Rucksack Deckel

Fahrrad-Blinker aus Rucksack Deckel

Dieses Projekt entstand während des CCA Rad gut Design Sprint abzielen, Biker besser sichtbar für Fahrzeuge auf der Straße war. Früher habe ich ein Material, das hatte ich schon die eine Rucksack-Regenhülle war. Der ganzen Beitrag über das Projekt fi
Arduino 1-Wire Sniffer

Arduino 1-Wire Sniffer

Während der Arbeit auf einem 1-Draht-Bus-System - Aufbau z.B. ein Arduino Uno 1-Wire-Slave-Gerät mithilfe einer OneWireSlave Bibliothek oder allgemeine Entwicklung und debugging - eine Logik Analysator, Auswertung und Interpretation den Bit-Datenverk
Spidern eine Ajax-Website mit einem asynchronen Login-Formular

Spidern eine Ajax-Website mit einem asynchronen Login-Formular

das Problem: Spidern Tools nicht AJAX Login-Authentifizierung zu ermöglichen.Diese instructable zeigen Ihnen, wie durch ein AJAX-Formular mit Python und einem Modul namens limitierte anmelden.Spinnen sind Web-Automatisierung-Programme, die zunehmend
Raspberry Pi und ein bisschen darüber

Raspberry Pi und ein bisschen darüber

In diesem instructable werde ich erklären, was eine Raspberry Pi ist und ein wenig über sie. Auch kann was Sie Projekte drauf tun.Schritt 1: Was ist ein Raspberry Pi?Der Raspberry Pi ist ein low-cost, Scheckkarten Format Computer, die an einem Comput
Python Programmierung für Android Minecraft PE

Python Programmierung für Android Minecraft PE

Die Raspberry PI-Version von Minecraft können Sie Skripts in Python Fraktale Entwürfe, Zeichnungen, Turtle-Grafik, einfache Spiele zu machen. Das gleiche lässt sich auf eine Desktop-Version mit meinem Himbeer Jam Mod (hier ist meine Instructable wie,
Python-Programmierung - Wörterbücher (for-Schleifen)

Python-Programmierung - Wörterbücher (for-Schleifen)

# Wörterbücher in Python; Übung aus Kapitel 3 in "Python schnell lernen"# Haben ein paar for-Schleifen in diesen, die Werte vertikal drucken könnenDrucken Sie ("Creating Wörterbuch jetzt.")Telnums = {}Drucken Sie ("bevölkern das W
Rechner-Coded mit Python

Rechner-Coded mit Python

nach dem lernen etwas über die Programmiersprache Python, ich aber, daß es nett wäre, um zu versuchen und einige der Mathematik zu replizieren, dass sie Python Shell hat mit einem GUI. Während ich eindeutig nicht die Schale Leistung entsprach fügt me
Zapfen der Minecraft Server Mod Schöpfung

Zapfen der Minecraft Server Mod Schöpfung

Minecraft-Server sind genial. Sie können Sie Freunde auf der ganzen Welt bauen mit Leuten reden und Herumspielen mit den Befehlen Zapfen und alle Plugins, die für sie zur Verfügung stehen. Wenn Sie dazu beitragen, die Plugins für Zapfen und allen Use
Star Wars und Star Trek in Minecraft mit Himbeer Marmelade Mod

Star Wars und Star Trek in Minecraft mit Himbeer Marmelade Mod

Ich werde erklären, wie man Star Wars (a) leicht zu machen und Star Trek (und anderen) 3D-Modelle Minecraft und (b) fliegt ein Raumschiff in Minecraft (oder sogar haben ein anderes Gebilde wie eine Fledermaus oder ein Zombie fliegen!), mit dem Beispi
Minecraft TNT Tissue Box Cover

Minecraft TNT Tissue Box Cover

Minecraft ist genial! Es sieht genial und es macht Spaß zu spielen. Seine pixelig Stil passt perfekt zu Handarbeiten wie Kunststoff Leinwand. Ich beschloss, ein Gewebe Kastendeckel mit Kunststoff Leinwand im Stil von Minecraft TNT-Block bilden. Viel