Python coding for Minecraft (8 / 17 stap)

Stap 8: L-systeem fractals met turtle graphics


Teken een driehoek. Nu nemen elke regel van de driehoek en vervang deze door een lijn met een driehoekige bult op het. Herhaal deze procedure. Zoals op de afbeelding met animatie (publiek domein, gebaseerd op



), krijgt u een Koch-sneeuwvlok.

Dit kan worden gemodelleerd door een super-eenvoudig schildpad-grafisch programma. Stel dat F betekent "teken voorwaarts", en "+" en "-" draai van 60 graden tegen de klok in en met de klok mee, respectievelijk. Dan is de eerste driehoek kan worden getrokken door:

Dat wil zeggen, gaan, recht door 120 graden uit te schakelen, ga dan naar voren, rechts door 120 graden uit te schakelen, ga vooruit.

De driehoekige hobbel lijn kan worden getrokken door:

Dus is hier hoe we kunnen genereren een sneeuwvlok. We nemen de eerste schildpad programma F ++ F ++ F tot het opstellen van een driehoek. Elke F in het vertegenwoordigt een lijn. Dus vervangen elke F door F-F ++ F-F. Als we gaan, genereren we de Koch-sneeuwvlok.

Dit is een eenvoudig voorbeeld van een L-systeem. Het idee achter een L-systeem is dat we met een tekenreeks beginnen (in dit geval F ++ F ++ F), en vervolgens een heleboel regels hoe de tekens wijzigen (in dit geval de ene regel ter vervanging van F met F-F ++ F-F) in elke iteratie. We passen dit een bos van tijden en krijgen we een nogal ingewikkeld tekenreeks. Na twee iteraties in het geval van sneeuwvlok krijgen we bijvoorbeeld:

Na vier krijgen we de afbeelding hierboven. (Om echt te krijgen een fractal, de lijnen moeten krimpen met elke iteratie, maar dat zal niet werken in Minecraft.)

Er is een heleboel echt goede informatie in dit gratis PDF boek.

Ik schreef een zeer eenvoudige lsystem.py module. Ter uitvoering van de sneeuwvlok, beginnen met standaardtekst:

Nu moeten we om de regels te definiëren. De afrondingsregels is door een python woordenboek:

Daarna definiëren we het keuzeaxioma, of startpunt:

Tot slot moeten we vertellen het systeem wat elk van de symbolen in het gemiddelde van de tekenreeksen. Voor verschillende L-systemen, we zullen verschillende betekenissen aan toe te wijzen (rotaties door verschillende hoeken, bijvoorbeeld). We moeten dus een tweede python woordenboek opgeven wat voor elk symbool is gedaan. Als u niet een actie voor een symbool opgeven, wordt het symbool genegeerd wanneer is het tijd voor de schildpad te trekken van de output (maar het is belangrijk voor de generatie). De betekenissen worden gegeven door een woordenboek dat aangeeft een functie om te bellen voor elk symbool. Één regel functies kunnen worden opgegeven met de lambda -operator. In dit geval zijn alle functies one-liners:

Tot slot roepen we de L-systeem, die aangeeft hoeveel iteraties (in dit geval 4):

Er is een speciale truc voor sommige L-systemen. Deze L-systemen worden raster uitgelijnd, met alle de rotaties wordt 90 graden. De vierkante curve (squarecurve.py) en de draak curve (dragoncurve.py) zijn mooie voorbeelden. De truc is om te bellen, ergens in de buurt van het begin van uw code:

Dit uw schildpad beweegt naar een integer raster locatie, en de kop in de richting van een raster uitgelijnd. Hierna blijft de schildpad precies raster uitgelijnd mits u het verplaatsen alleen met integer bedragen (bijvoorbeeld 7 niet 7.1, en niet zelfs 7. of 7.0 als deze zijn zwevend punt in Python), en u draaien alleen door een geheel getal: bedragen die veelvouden van 90 graden (b.v.,-180, of 90, maar niet 90.0 of 45 zijn). De draak kromme code geeft ook een voorbeeld van een voorwaartse functie die is een beetje ingewikkelder--in plaats van enkel een lijn, een muur met een opening in het trekt.

Eigenlijk kan roepen gridalign() soms een goed idee zelfs als niet alle van uw hoeken haaks zijn. Zul je waarschijnlijk krijgen enkele problemen van afrondingsfouten in een groot beeld, maar het kan nog beter kijken. Zie het voorbeeld van spacefilling curve (weergegeven in paars gekleurd glas!).

L-systemen hoeft te zijn tweedimensionaal. U kunt het opnemen van symbolen die yaw, pitch en roll rotaties. Voor het ontwerpen van bomen, een nuttige truc is dat de stapel opdrachten: ' [' opslaan in de huidige tekening staat een stapel en ']' om het te herstellen. Dit zal van de module van de schildpad push() en pop() methoden gebruiken. Bijvoorbeeld, is hier een fragment van code voor het tekenen van een eenvoudige boom (ltree.py):

Denk aan de L als een blad (hoewel deze eenvoudige code niet eigenlijk het blad--dat zou moeten worden toegevoegd aan het woordenboek tekenen). We beginnen met FL, die bestaat uit een romp plus een blad. Dan vervangen wij elk blad door [^ FL] > [^ FL] > [^ FL]. Dit is een set van drie takken, elk gekanteld door 20 graden uit de kofferbak, 120 graden uit elkaar. De haakjes zorgen ervoor dat na elk nieuw ^ FL is getekend, zijn we terug waar we waren vóór het. Dit wordt herhaald, zodat de bladeren op de takken worden vervangen door triples van takken, enzovoort.

Een meer realistische boom hadden meer complexe code voor ' ['. Het kon maken van de volgende takken korter en dunner, en hun materiaal te veranderen als we dichter bij de bladeren (en vervolgens terugzetten op ']'). Ik ook zo'n een boom als de manifestatiecode in lsystem.py, op basis van regels (met enkele aanpassingen) van De Geeky Blogger.

Ook kan je 3D dingen raster uitgelijnd. Hilbert.py heeft bijvoorbeeld een 3D Hilbert-curve.

Ten slotte, wilt mogelijk voeren sommige randomisatie in de regels van de L-systeem. Tot nu toe onze regels waren deterministische: één tekenreeks kreeg die vervangt een symbool, bijvoorbeeld 'F': ' F-F ++ F-F'. Maar in plaats van een eenvoudige vervangingstekenreeks, men een Python lijst van paren (p, string), waar p is een kans (van 0 tot 1) en de tekenreeks is de string moet worden gebruikt met deze kans kan geven. De waarschijnlijkheid van een bepaalde bron symbool had beter niet toevoegen tot meer dan 1, maar ze kunnen oplopen tot minder dan één--in dat geval is er een kans dat er geen vervanger zal zijn. Bijvoorbeeld, is hier een lichtjes gerandomiseerde versie van geeky .blogger de boom:

Deze regel heeft een 55% kans op een A vervangen door de structuur van een drie-tak, en een 25% kans op het vervangen van een twee-tak-structuur. Dit is niet zeer willekeurige--meer willekeur zou maken van dingen nog meer levensecht. Ik hecht een screenshot van een vrij schaars forest willekeurig gegenereerd met behulp van deze regel (en willekeurige plaatsing van bomen, onder voorbehoud van een minimale afstand).

Gerelateerde Artikelen

Zomer kamp klasse op Python codering met Minecraft

Zomer kamp klasse op Python codering met Minecraft

Afgelopen zomer, leerde ik een vijf-daagse 1,5-uur-per-dag zomer kamp mini-cursus op Python programmeren met Minecraft voor begaafde kinderen als onderdeel van de Baylor University for Young People. Meeste kinderen waren een onderdeel van Project bel
Python codering voor Android Minecraft PE

Python codering voor Android Minecraft PE

De Raspberry PI versie van Minecraft kunt u script in Python, maken van fractal ontwerpen, tekeningen, turtle graphics, simpele spelletjes, enz. Hetzelfde kan worden gedaan op een desktop-versie met mijn frambozen Jam Mod (hier is mijn Instructable o
Star Wars "en" Star Trek in Minecraft met frambozen Jam Mod

Star Wars "en" Star Trek in Minecraft met frambozen Jam Mod

Ik zal uitleggen hoe (a) gemakkelijk maken van Star Wars en Star Trek (en andere) 3D modellen in Minecraft en (b) vliegen een ruimteschip in Minecraft (of zelfs hebben een andere entiteit, zoals een vleermuis of een zombie, vliegen het!), met behulp
Hoe maak je een grote Fancy House In Minecraft

Hoe maak je een grote Fancy House In Minecraft

Voordat we beginnen, wil ik u waarschuwen dat dit is gewoon een algemene gids voor het huis gebouw, zal ik niet geven exacte verhoudingen zoals sommige mensen willen een ander soort huis.Waarschuwing: Deze gids bestaat fore Minecraft 1.8. Andere vers
Echte wereld Minecraft

Echte wereld Minecraft

We all Know Minecraft is een geweldig spel, en Raspberry Pi heeft het meer awesome. Met de Minecraft-API kunnen we nu eenvoudig python scripts schrijven naar interface lezen wereld sensoren en knoppen in de Minecraft wereld.Stap 1: Benodigdheden 1. b
Raspberry Pi internetradio met kolf

Raspberry Pi internetradio met kolf

Het doel van deze tutorial is om u te tonen hoe u een radio die kan streamen van audio van het internet kunt bouwen met behulp van een eenvoudige web-interface om hem te bedienen. We zullen het volgende nodig:Raspberry PiSommige sprekers u kunt aansl
Personal Assistant met Telegram & Arduino.

Personal Assistant met Telegram & Arduino.

Hallo mensen!Een paar maanden geleden hoorde ik over een project dat een instant messenger bot gebruikt voor het maken van een systeem dat zou automatisch verwerken en ordenen van pizza's verzendingen door de costumieren via Whats app. Ik was als...
Fiets beurt Indicator van rugzak Cover

Fiets beurt Indicator van rugzak Cover

Dit project werd opgericht tijdens de CCA wiel goed ontwerp Sprint , die was gericht op het maken van fietsers beter zichtbaar voor voertuigen op de weg. Ik gebruikte een materiaal dat ik al gehad dat een regenhoes voor rugzak was. De volledige post
Raspberry Pi en een beetje erover

Raspberry Pi en een beetje erover

In dit instructable ik ga uitleggen wat een raspberry pi is en een beetje erover. Ook kunt projecten wat u doen op het.Stap 1: Wat is een Raspberry Pi?De Raspberry Pi is een low-cost, creditcard formaat computer die worden aangesloten op een monitor
Python programmeren - woordenboeken (for-lussen)

Python programmeren - woordenboeken (for-lussen)

# woordenboeken in Python; uitoefening van hoofdstuk 3 in "Snel Python leren"# Heb een paar for-lussen in deze die kunnen waarden verticaal afdrukkenafdrukken ("maken woordenboek nu.")telnums = {}afdrukken ("bevolken het woordenbo
Rekenmachine Coded met Python

Rekenmachine Coded met Python

na het leren een beetje over de programmeertaal Python, ik al dat het keurig om te proberen te repliceren van sommige van de wiskunde zou zijn dat zij Python shell doet met een GUI. Terwijl ik duidelijk niet overeenkomen met de shell prestaties voegt
Hoe maak je een Minecraft Skin for PC

Hoe maak je een Minecraft Skin for PC

Voordat dit instructable moet ik duidelijk dat deze huid maker alleen voor PC is maken. Met die uit de manier laat de slag!Stap 1: Aan de slag Om te beginnen u zal moeten gaan naar de website genaamd Nova huid. Zodra u het gevonden en opende het op i
Minecraft Simple Starter Kit For Survival spelers

Minecraft Simple Starter Kit For Survival spelers

Hallo iedereen! Vandaag zal ik laten zien u een gids voor mensen die willen beginnen overleving werelden!Stap 1: Grijpen sommige hout Eerste treft u 3 stukken hout van een mooie boom. Neem niet meer of u zult zitten having te veel hout.Stap 2: knutse
Minecraft Spigot Server Mod creatie

Minecraft Spigot Server Mod creatie

Minecraft servers zijn geweldig. Ze u toestaan om te bouwen van vrienden over de hele wereld, praten met mensen en prutsen met alle de opdrachten spon en alle plugins die beschikbaar voor het zijn. Als u helpen uitbreiden van de plugins beschikbaar v