Förfarandemässigt genereras träd (1 / 10 steg)

Steg 1: rekursion



Att införa rekursion

Vår fraktal-träd kommer att använda ett begrepp som kallas rekursion. Rekursion innebär i princip en funktion appeller sig själv, om och om igen, tills ett stoppvillkor uppfylls. Ett vanligt exempel på en rekursiv algoritm beräkningen av Fibonaccien ordnar. Fibonaccien ordnar går 0, 1, 1, 2, 3, 5, 8, 13... De två första delarna är 0 och 1, och då varje element efter som är summan av de två sista delarna. Så kan vi skriva en funktion Fib(n) där n är index (med C/Java syntax) som:

< p > int Fib(n) < br > {
tillbaka n < 2? n: Fib(n-1) + Fib(n-2);
} < /p >

Så kan säga vi vill hitta det femte elementet, Fib(5) kräver Fib(4) och Fib(3), och så vidare i den mode tills Fib(0) eller Fib(1) blir synad. Detta är "stoppvillkoret" där det bara returnerar 0 eller 1 istället för att ringa Fib() igen.

Sanna rekursion är inte möjligt i OpenSCAD, eftersom det inte är ett funktionellt programmeringsspråk. OpenSCAD använder moduler, som liknar funktioner eller metoder, men sammanställs på ett annat sätt. I traditionell programmering förvandlar kompilatorn din kod till en uppsättning instruktioner för datorn att utföra. I OpenSCAD vänder kompilatorn dina instruktioner till en 3D-modell.

När du skriver ett C-program, till exempel, som beräknar de första några delarna av Fibonaccien ordnar, det sammanställer ner till samma storlek som en som beräknar de första miljonen element av sekvensen. När du gör något sånt här i OpenSCAD, din produktion är en miljon gånger större, och tar en miljon gånger så lång tid att sammanställa.

Därför måste du vara mycket försiktig med att gå igenom för många iterationer!

I de flesta versioner av OpenSCAD kan det du inte sammanställa en modul som kallar sin egen direkt, så jag använder följande mönster för att komma runt det:

  • Först skapa modul A, och generera några geometri inom it.
  • Sedan i A, kalla modul B.
  • Nu skapa modul B.
  • Det gör ingenting förutom kallar modul A.
  • A är nu en faktisk rekursiva modul. (Se till att ha ett stoppvillkor att undvika en oändlig loop.)
Se Steg
Relaterade Ämnen

Skulpterade förfarandemässigt genereras hyllor

Jag är konstnär intresserade av processuella/generativa design. Jag älskar söker inspiration i naturen (och det finns gott om det!) och försöker efterlikna och utöka som bara för att se om det ser coolt. I mitt tidigare jobb som passion stannade i de...

Star Wars tema retro arkadspel

En knapp. LCD. genereras förfarandemässigt terräng. En skvätt Star Wars. Ett beroendeframkallande spel.Inte säker på varför, men jag har varit besatt av konst stil av de pixelated retro arkadspel. Jag kunde bara inte få nog och så jag beslutat att gö...

32 x 32 ledde matrisen

Bygga en 32 x 32 ledde matrisen med hjälp av en Atmega2560 mikrokontroller. Projektet innehåller stegen för att bygga matrix styrelse, PCB och programvaran (skriven i C++). Programvaran innehåller över 30 animationer, en RTC (realtidsklocka) och en t...

Autonomus vägg följande hinder att undvika Arduino Rescue Bot

jag är en ha som huvudämne elektroteknik och varje år mitt college gren av IEEE tävlar i en studenttävling hårdvara. Förra årets tävling var inspirerad av naturkatastroferna i Haiti och Chile (tävlingen hölls en vecka efter jordbävningen i Japan). De...

Hinder undvika spel

För detta uppdrag vi gavs en Altera DE2-115 ombord med en cyklon IV E FPGA och berättade att skapa ett projekt som använder hårdvara av styrelsen och Verilog HDL språket som vi lärt oss i klassen. Vi trodde det skulle vara intressant att ha ett proje...

Två spelare Simon Memory spel med externa switchar

Elektronik minnesspel som Simon kan vara mycket roligt. Men det är ännu roligare om du lägger till en andra spelare och att en konkurrens. Så jag ritade en två player version av spelet som körs på Arduino. Här kan du spela Simon huvud till huvud.För...

Fiber Optic Panel stjärna tak

För min hustru och jag, har en dröm hos oss alltid varit att ha en hemmabio att titta på filmer med vår familj. Detta senaste vintern vi har äntligen kunnat göra det en verklighet. Vi hade våra färdiga källaren och därvid jag planerat ett bra storlek...

Falska TV - inbrottstjuv avskräckande

Jag var shopping runt på Amazon häromdagen och kom över en produkt som jag trodde var geni. Det kallas falska TV och det fungerar som en inbrottstjuv avskräckande medan du befinner dig utanför huset. På natten, Fake TV: N slås på och använder en seri...

Linkit en UUID4 Generator

Här är vi!Jag tillbringade trevlig tid med min nya styrelsen Linkit en och här jag presentera dig mitt första projekt.Linkit en UUID4 GeneratorDetta är en enkel skiss att skapa ett slumpmässigt generera UUID4 kod, det är utformat för att vara fitte i...

Hur man överlever ditt första natten i Minecraft i endast 11 steg

så du har äntligen gett att de hype och köpte Minecraft.Great! Nu, du har bara att lista ut hur man spelar det. Låter enkelt, rätt? Tyvärr är Minecraft "universe" stora och förvirrande. Vad är värre att Minecraft inte kommer med handledning nivå...

Att göra ett Panorama i Photoshop (GoPro eller vanliga kameror)

Disclaimer: Jag är inte en ledar-Photoshop eller något. Jag ska försöka förmedla vad jag vet, men vill du komplicerade saker att fungera, jag vet inte hur mycket av en hjälp jag ska vara!Som en heads up gjorde jag denna guide för den fototävling! Om...

Steampunk style demi-droid EZ-Robot controlled

FRED (vänlig robot Entertainment Droid) är en Instructable inspirerade "Steampunk" stil demi-droid gjorda av återvunna metaller och skogen. Huvudet är en inspiration från olika YT exempel. Ögonen är handgjorda från epoxiharts och är utbytbara me...

Arduino OBD2 Simulator

Ive varit att bygga en Arduino OBD2 Scanner till gränssnittet med min Jeep OBD2 port, men det blev en beeeeeg! kånka ladda upp koden till min Arduino Nano + 16 x 2 LCD + ELM327 skannerenhet, sedan dra hela prototypen till jeepen i gurage hela tiden o...

"Vänner" episod Suggestor

När vänner blev tillgängliga på Netflix, var det både en välsignelse och en förbannelse för vänner fans. Å ena sidan, kan vi alla vara glada att ha sådan en stor show streamable var som helst, när som helst för vår visning nöje... men å andra sidan,...

Ryobi 18V sladdlös sticksåg / Sawzall hacka (att besegra säkerhetsbrytaren)

om du använder verktyg ofta kan du få frustrerat med säkerhetsbrytarna, särskilt de som du måste aktiveras innan du kan dra med hjälp av verktyget. Jag vet att de är välmenande, men faktum är att jag ofta känner mig mindre säker behöva försöka vrida...

Generera slumptal genom att använda Arduino

En Slumptalsgenerering är mycket viktigt i enheter som hjälper dem att uppgift i slumpmässigt sätt. Tillämpningar av Slumptalsgenerering kan hittas i blanda ljudfiler i en musikspelare, i nästan alla slags digitala spel, generera lösenord etc. Det fi...

Star Trek Cross Stitch: Nästa Generation besättningen

Cross stitch mönster (i excel och bild form) med de viktigaste besättningen från Star Trek: The Next Generation.Steg 1: materialAida 14 antal tyg (mönster skrivet för en 5 x 7" ram)Färger (standard floss färgnummer)Röda tröjor - 817Gula skjortor - 72...

Lägenhet storlek skänk med koi fanér bildmässigt inlaga - CNC och Laser

de flesta vitrinskåp är ganska stora djur. Jag hade en begäran att konstruera en förminskad ner sideboard som skulle passa i en lägenhet eller liten matplats. Vi skulle också en dramatisk accent pjäs. De bildmässiga inlays skapades med en laserskärar...

Bygga Blinquencer - en lätt kontrolleras slumpmässigt speldosa

Detta Instructable visar dig hur man bygger en Blinquencer - en semi-slumpmässigt optiska melodi generator att använder tre blinkande lysdioder lyser på ett par ljus beroende motstånd att styra tonhöjden för två enkla ljud kretsar att skapa melodiska...