Arduino + TFT--> sköldpadda grafik (16 / 18 steg)

Steg 16: Rekursiva ritning



Hittills har vi talat sköldpaddan var att dra och den har gjort vad det berättades - även med mer komplicerade ritningar till exempel bil exempel. Men rekursion ger sköldpaddan ett eget liv. Ni det vad att göra och sedan luta sig tillbaka och titta.

Här är en länk till Wikipedias diskussion om rekursion:

www.wikipedia.org/wiki/Recursion _ (computer_science...

Vad är rekursion? För en person skriver Arduino sköldpadda grafikfunktioner, är det ett annorlunda sätt att tänka. Sköldpaddan som gör ritningen, är det ett mått av oberoende: "Bara få mig igång och se mig gå!"

Obs: Arduino Uno har begränsad SRAM-minne, men fortfarande tillräckligt att använda rekursion i vår sköldpadda grafik exempel. Om du försöker att använda för många rekursiva steg, kanske din funktioner inte fungerar. Vi har emellertid inte kommit att begränsa i vårt exempel, så låt oss gå vidare och se hur det här fungerar...

När vi åberopa rekursion använder vi en funktion som anropar sig själv. Hur gör vi det? Det är lättast att förklara med ett kort exempel som drar en V:

void vee(length); Om du kör detta exempel, prova med längden på 80 pixlar

{

t.Left(45); turnor vänster 45 grader

t.Forward(length); drar vänster arm i V med längd anges - 80 pixlar, till exempel

t.Back(length); återgår till början punkt av V

t.Right(90); vrider höger 90 grader - vilket är 45 grader till höger om den ursprungliga orienteringen

t.Forward(length); drar höger arm i V

t.Back(length); återvänder till utgångspunkten

t.Left(45); tillbaka till ursprungliga orienteringen

}

Där - drar som ett V. Nu är vi redo att lägga till rekursion. Efter den första raden det påstår t.forward(length), Lägg till följande rad:

Vee(length / 2); Detta är rekursion - en funktion som anropar sig själv!

Du har ritat i vänster arm i V och nu du kallar samma funktion för att rita en annan V som är halv storlek. När är klar, fortsätter den ursprungliga funktionen att dra det ursprungliga, större V. Detta är ett intressant sätt att rita något. Det är faktiskt ett intressant sätt att tänka om hur saker kan dras.

Nu ska vi lägga till en mindre mot slutet av höger arm också. Lägg till denna rad igen efter den andra t.forward(length); :

Vee(length / 2); Detta är rekursion - en funktion som anropar sig själv!

Vi är nästan klar, förutom en sak - funktionen inte fungerar som det är - det finns något att fixa. Rekursion behöver en stopp-punkt, kommer inte att det fortsätta på obestämd tid. (Detta misstaget jag gjorde när jag första försökt Rita en V med hjälp av rekursion - det fungerade inte för mig och jag var tvungen att få råd.) Lägg till detta stopp rutin i början av funktionen:

om (längd < 10)

{

hemkomst.

}

Där. Nu har vi en stopp-punkt - när armarna på V minskas till mindre än 10 pixlar (Observera att längden halveras varje gång funktionen anropas) - funktionen stoppen.

Här är den kompletta rekursiva vee funktionen:

int längd = 80. en variabel som anger längden på den V vapen

void vee(length); namn funktion, med en parameter, som är längden av den V sidor
{

om (längd < 10)
{

hemkomst. Detta stoppar rekursion när längd är mindre än 10 pixlar!

}

t.Left(45); vänder vänster 45 grader

t.Forward(length); drar vänster arm i V med längd 80 pixlar

Vee(length / 2); Detta är rekursion - funktionen kallar sig för att dra mindre V!

t.Back(length); återvänder till botten av V

t.Right(90); vänder rätt 45 grader

t.Forward(length); drar höger arm i V

Vee(length / 2); Detta är rekursion igen!

t.Back(length); återvänder till utgångspunkten

t.Left(45); tillbaka till ursprungliga orienteringen

}

Nu kan du prova funktionen. Prova med olika värden för längden på V - titta och se vad som händer!

EXEMPEL 1 - KOTTAR

I detta exempel används en funktion som vi har heter rCones Rita två bågar, t.arcLeft() och t.arcRight(), var och en av 360 pixlar i omkrets. Efter ritning första bågen, funktionen appeller sig själv (!-rekursion)- och drar en mindre båge, 30 bildpunkter kortare i omkrets. Detta fortsätter tills stopp gränsen är nådd, när den mindre bågen är mindre än 100 bildpunkter i omkrets.

EXEMPEL 2 - ETT LITET TRÄD

Funktionen rTree exempel liknar V exemplet ovan.

EXEMPEL 3 - ETT TRÄD MED FLER GRENAR

Här används samma rTree funktion används i exempel 2, men genom att ange en längre gren storlek funktionen drar många fler grenar. Det är intressant att se hur mycket detaljer kan läggas till genom att helt enkelt ändra detta en parameter.

EXEMPEL 4 - ETT MER KOMPLEXT TRÄD

Principen är densamma - men i denna funktion kan vi ange olika längder av vänster grenar och rätt grenar, och annan vänstra vinkel och rätt vinkel för grenar. Även kortare slutet grenar dras en annan färg. Vår sköldpadda blir ganska konstnärliga. Beroende på de värden som används, kan den resulterande bilden vara sofistikerat. Prova några olika gren längder och färger och se vad som händer.

EXEMPEL 5 - REKURSIV TRIANGLAR

Detta exempel ritar Sierpinski trianglar. Läs mer om dem på Wikipedia:

https://en.wikipedia.org/wiki/Sierpinski_triangle

Se Steg
Relaterade Ämnen

Arduino + TFT = visuell musik

Sammanfattning:Ljud: I detta projekt Arduino läser en sträng av anteckningar som skrivs i formatet musik notation vi har kallat lätt musik språk. Det väljer varje musikalisk kommentar (eller resten), avgör dess frekvens och spelar alltså. Grafik: The...

Arduino TFT Text handledning

Du behöver detta delar:-Arduino Uno R3-TFT-skärm-Följande Arduino bibliotekSteg 1: SrcDetta är src#include#include #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4 Adafruit_TFTLCD tft (LCD_CS, LCD_CD, LCD_W...

Arduino TFT display och teckensnitt bibliotek

Jag är en fan av Arduino eftersom det finns så mycket programvara som redan finns tillgänglig på internet, detta gör att fylla nya projekt enklare!Nyligen köpte jag ett par billiga 1.8" TFT skärmar för ett projekt, från början kunde jag inte få dem a...

Arduino / TFT LCD-anslutning

Du säger att du vill koppla in en TFT-skärm till en Arduino? Skämtar du?No! För om priset för en bekant 2 x 16 LCD, du får en högupplöst TFT-skärm. För så lågt som $4 (frakt ingår!), är det möjligt att köpa en liten, skarp TFT skärm som kan vara grän...

Arduino - TFT uppvisning av bilder från en SD kort

Efter min andra Instructables på Arduino och TFT är display här ett uppdaterat bibliotek och skiss Rita bitmappar (BMP eller rå) lagras på ett SD-kort på TFT displayen.De flesta av de tillgängliga TFT-skärmarna har en SD-kortplats på baksidan, anslut...

Arduino TFT prognos väderstation med ESP8266

Detta projekt bygger på Wunderground väderprognos via Internet.Specifikationer:1. 3 dagar väderprognosen (låg & hög temps, antagligen av nederbörd, skick ikoner)2. aktuella väderförhållanden (nuvarande temp, feelslike temp, fuktighet, tryck)3. aktuel...

Arduino TFT färg klocka

Du kanske känner till en webbplats i Storbritannien kallas färg klocka (http://thecolourclock.co.uk/) som omvandlar tiden till en hex värde och använder sedan det värdet för att uppdatera bakgrundsfärgen. Det är mycket hypnotiska och när du vänjer si...

Arduino - TFT-skärm med ikoner och bilder från FLASH-minne

I detta Instructable hittar du ett bibliotek och skiss för att rita bilder lagrade i Arduino FLASH minne på en TFT-skärm.Här använder vi min favorit 2.2" 320 x 240 pixel ILI9341 baserade TFT-skärm. Denna display är en trevlig storlek för Arduino base...

Arduino TFT oscilliscope

Det här är min video på att göra en arduino oscilliscope. Oscilliscope var ganska billig, så ha kul. Det är lite rå, gör det jobbet. Några saker att tänka:1.) användning 10 uf kondensator2.) Använd en ohm sortiment på transistorer mellan 100 kiliohms...

Arduino/behandling: Rörlig grafik och lampor reagera på ljud

tog en stund för att fånga vad jag ville, men det var det värt....

Din bild på en Arduino! -TFT LCD skärm Guide

har du hört talas om TFT LCD-skärmar? De är bra sätt att visa information från din Arduino eller Visa bilder. Arduino laget släppt precis en officiell TFT LCD-skärm med sina nya Robot på Maker Faire 2013. Det är mycket lätt att komma igång med! Denna...

Arduino "Talande" Temp / fukt på en TFT LCD med reläer

Från http://arduinotronics.blogspot.com sinnenUPPDATERING: Lagt till vår SpeakEasy text till tal (TTS) sköld för att göra detta till en "Talar" väderstation!UPPDATERING: Lagt till en 4 port relay board för enhetskontrollUPPDATERING: Lagt till da...

Arduino Ukulele Tuner

Göra en Arduino - Adafruit TFT sköld - piezo Summer - Ukulele tuner.Vad är det:Detta Instructable visar hur man gör en analog ukulele mottagare som använder standard G ukulele tuning. Det är ett effektivt stöd för att trimma din ukulele.Vad är det in...

Baserade Arduino RGB Matrix LED testare

Detta är en mycket enkel Arduino projekt vilken kontroll panelen 16 x 32 RGB LED Matrix via en 16pin IDC kabel. Arduinoen kommer att kontinuerligt skicka 5 set färger (röd, grön, blå, vit, svart) till panelen LED matris som gör att teknikern att ta r...

Aurdino All sakerna--Visa din bild i Arduino Tuch rasbranter

ave du någonsin hört talas om TFT LCD-skärmar? De är bra sätt att visa information från din Arduino eller Visa bilder. Arduino laget släppt precis en officiell TFT LCD-skärm med sina nya Robot på Maker Faire 2013. Det är mycket lätt att komma igång m...

Etch-a-Sketch LOGO - EASiLOGO

Vad får du om du korsar en sköldpadda med en Etch-a-Sketch?Etch-A-Sketch interaktiva LOGO - "EASiLOGO"!Detta är den första programmeringsspråk som utformats speciellt för världen berömda leksaken från Ohio Arts - Etch-a-Sketch. Om du aldrig sett...

Python coding for Minecraft

Detta Instructable visar hur du installerar och använder en mod som jag skrev som låter dig styra Minecraft med python skript. Ska jag fokusera på Windows, men OS X och Linux bör fungera lika bra.Python-skript kan skapa fina saker i världen, och det...

Komma igång med Mini fickdatorer

Om en och en halv månad sedan, jag skapade ett projekt kallat Mini fickdator och skrev en Instructable på hur man bygger den. Detta Instructable tar hela projektet ett steg längre genom att hjälpa dig att komma igång med din fickdator Mini. Har inte...

Python kodning för Android Minecraft PE

Raspberry PI version av Minecraft låter du skriptet i Python, att göra fraktala mönster, ritningar, sköldpadda grafik, enkel spel, etc. Samma sak kan göras på en stationär version med min Raspberry Jam Mod (här är min Instructable på hur man använder...