Arduino + TFT Turtle Graphics--> (16 / 18 stap)

Stap 16: Recursieve tekening


Tot nu hebben we de schildpad verteld waar getrokken en het heeft gedaan wat het was verteld - zelfs met meer ingewikkelde tekeningen zoals in het voorbeeld van de auto. Maar recursie geeft de schildpad een eigen leven. U vertellen wat te doen en dan achterover leunen en kijken.

Hier is een link naar Wikipedia's bespreking van recursie:

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

Wat is recursie? Voor een persoon schrijven Arduino schildpad grafische functies, is het een andere manier van denken. Voor de schildpad die de tekening doet, is een zekere mate van onafhankelijkheid: "Just get me started en watch me gaan!"

Opmerking: de Arduino Uno heeft beperkte SRAM geheugen, maar nog steeds voldoende om recursie te gebruiken in onze voorbeelden turtle graphics. Als u probeert te gebruiken teveel recursieve stappen, uw functies werken mogelijk niet. Maar we hebben niet bereikt dat beperken in onze voorbeelden, dus laten we gaan vooruit en zien hoe dit werkt...

Wanneer we recursie roepen gebruiken wij een functie die zich roept. Hoe doen we dat? Het is het makkelijkst uit te leggen met een korte voorbeeld dat een V: trekt

nietig vee(length); Als u dit voorbeeld uitvoert, probeer het eens met een lengte van 80 pixels

{

t.Left(45); turnen links 45 graden

t.forward(length); tekent linkerarm van V met opgegeven - lengte 80 pixels, bijvoorbeeld

t.back(length); keert terug naar het begin punt van V

t.Right(90); draait rechts 90 graden - die is 45 graden naar rechts van de oorspronkelijke oriëntatie

t.forward(length); vestigt de rechterarm van V

t.back(length); keert terug naar het vertrekpunt

t.Left(45); keert terug naar de oorspronkelijke oriëntatie

}

Dat trekt er - een V. Nu zijn we klaar om toe te voegen van recursie. Na de eerste regel dat toevoegen t.forward(length); deze regel:

vee(length / 2); Dit is de recursie - een functie die zichzelf!

U hebt getrokken de linkerarm voor de V en nu u de dezelfde functie aanroepen om te trekken een ander V thats halve grootte. Nadat dat is voltooid, wordt de oorspronkelijke functie blijft tot het opstellen van de oorspronkelijke, grotere V. Dit is een interessante manier iets te tekenen. Het is eigenlijk een interessante manier van denken over hoe dingen kunnen worden getrokken.

Nu laten we het toevoegen van een kleinere V aan het einde van de rechterarm zo goed. Voeg deze regel weer na de tweede t.forward(length); :

vee(length / 2); Dit is de recursie - een functie die zichzelf!

We zijn bijna klaar, behalve voor een ding - de functie zal niet werken zoals die het is - er is iets om op te lossen. Recursie moet een stop-punt, zal niet het eindeloos doorgaan. (Deze de fout maakte ik toen ik voor het eerst geprobeerd tot het opstellen van een V met behulp van recursie - het werkte niet voor mij en ik had om advies te krijgen.) Voeg deze stop routine aan het begin van de functie:

Als (lengte < 10)

{

terugkeer;

}

Daar. Nu hebben we een stop-punt - wanneer de takken van de V zijn teruggebracht tot minder dan 10 pixels (Let op dat de lengte telkens wanneer de functie wordt aangeroepen is gehalveerd) - de functie stopt.

Hier is de volledige recursieve vee functie:

int lengte = 80; een variabele waarmee de lengte van de V's armen

nietig vee(length); namen van de functie, met één parameter, die de lengte van de zijden van de V is
{

Als (lengte < 10)
{

terugkeer; Dit stopt de recursie als lengte minder dan 10 pixels is!

}

t.Left(45); draait links 45 graden

t.forward(length); vestigt linkerarm van V met lengte van 80 pixels

vee(length / 2); Dit is de recursie - functie die zichzelf om te tekenen van kleinere V!

t.back(length); keert terug naar de onderkant van de V

t.Right(90); draait rechts 45 graden

t.forward(length); vestigt de rechterarm van V

vee(length / 2); Dit is de recursie weer!

t.back(length); keert terug naar het vertrekpunt

t.Left(45); keert terug naar de oorspronkelijke oriëntatie

}

Nu kunt u de functie. Probeer het met verschillende waarden voor de lengte van de V - kijken en zien wat er gebeurt!

VOORBEELD 1 - KEGELS

In dit voorbeeld wordt een functie die we hebben genoemd rCones wil twee bogen, t.arcLeft() en t.arcRight(), elk van 360 pixels in omtrek. Na het trekken van de eerste boog, de functie zichzelf aanroept (!-recursie)- en trekt een kleinere boog, 30 pixels korter in omtrek. Dit gaat zo door totdat de stop limiet is bereikt, wanneer de kleinere boog minder dan 100 pixels in omtrek is.

VOORBEELD 2 - EEN KLEINE BOOM

De voorbeeldfunctie van het rTree is vergelijkbaar met het bovenstaande voorbeeld van de V.

VOORBEELD 3 - EEN BOOM MET MEER TAKKEN

Deze maakt gebruik van dezelfde rTree functie gebruikt in voorbeeld 2, maar door het opgeven van een lange tak grootte de functie trekt veel meer takken. Het is interessant om te zien hoeveel detail kan worden toegevoegd door simpelweg het veranderen van deze één parameter.

VOORBEELD 4 - EEN COMPLEXERE BOOM

Het principe is hetzelfde - maar in deze functie zijn wij in staat om op te geven van de verschillende lengtes van de linker takken en de takken van het recht, en andere linker hoek en rechte hoek voor de takken. Ook de kortere einde takken worden getekend een andere kleur. Onze schildpad krijgt heel artistiek. Afhankelijk van de waarden is gebruikt, kan de resulterende afbeelding worden verfijnd. Probeer enkele tak van verschillende lengtes en kleuren en zien wat er gebeurt.

VOORBEELD 5 - RECURSIEVE DRIEHOEKEN

In het volgende voorbeeld worden Sierpiński driehoeken getekend. Lees meer over hen op Wikipedia:

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

Gerelateerde Artikelen

Arduino + TFT visuele muziek =

Arduino + TFT visuele muziek =

Samenvatting:Audio: In dit project de Arduino leest een reeks van nota's geschreven in de notatie van de muziekformaat hebben wij gevraagd makkelijke taal van de muziek. Elke muzikale opmerking (of rest) selecteert, bepaalt de frequentie en speelt di
Arduino TFT tekstuele zelfstudie

Arduino TFT tekstuele zelfstudie

U moet dit delen:-Arduino Uno R3-TFT Display-De volgende Arduino LibraryStap 1: SrcDit is de 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_WR,
Arduino TFT beeldscherm en lettertype bibliotheek

Arduino TFT beeldscherm en lettertype bibliotheek

Ik ben nogal een fan van de Arduino, want er is zo veel software al beschikbaar op het internet, dit maakt voltooiing van nieuwe projecten gemakkelijker!Onlangs kocht ik een paar goedkope 1.8" TFT-beeldschermen voor een project, in eerste instantie k
Arduino - TFT-breedbeeldscherm van bitmap-afbeeldingen van een SD-kaart

Arduino - TFT-breedbeeldscherm van bitmap-afbeeldingen van een SD-kaart

Naar aanleiding van mijn andere Instructables op de Arduino en TFT is display hier een bijgewerkte bibliotheek en schets tot het opstellen van bitmaps (BMP of Raw) opgeslagen op een SD-kaart op het TFT-display.De meeste van de beschikbare TFT-beeldsc
Arduino TFT voorspelling weerstation met ESP8266

Arduino TFT voorspelling weerstation met ESP8266

Dit project bouwt voort op Wunderground weerbericht via het Internet.Specificaties:1. 3 dagen weerbericht (Low & High temps, waarschijnlijk van neerslag, voorwaarde pictogrammen)2. de huidige weersomstandigheden (huidige temperaturen feelslike temp,
De Arduino / TFT LCD verbinding

De Arduino / TFT LCD verbinding

U zegt dat u wilt een TFT-scherm aan een Arduino aansluiten? Zijn u een grapje?No! Voor over de prijs van een bekende 2 x 16 LCD, krijg je een hoge resolutie TFT beeldscherm. Voor zo laag als $4 (verzendkosten inbegrepen!), is het mogelijk om te kope
Arduino TFT kleur klok

Arduino TFT kleur klok

U wellicht bekend met een website in het Verenigd Koninkrijk genoemd kleur klok (http://thecolourclock.co.uk/) die de tijd zet in een hexadecimale waarde en wordt die waarde vervolgens gebruikt voor het bijwerken van de achtergrondkleur. Het is zeer
Arduino - TFT weergave van pictogrammen en beelden van FLASH-geheugen

Arduino - TFT weergave van pictogrammen en beelden van FLASH-geheugen

Dit Instructable moet u vind een bibliotheek en schets u wilt uitzetten van afbeeldingen die zijn opgeslagen in de Arduino FLASH-geheugen op een TFT-scherm.Hier gebruiken we mijn favoriet 2.2" 320 x 240 pixel ILI9341 gebaseerde TFT display. Dit displ
Eenvoudige Designs - Turtle Graphics Python

Eenvoudige Designs - Turtle Graphics Python

Als we kijken naar de schoonheid van de foto's. Is het soort dingen die kreeg me in de schildpad. Om eerlijk te zijn, ik was een fan van MS Logo op de leeftijd van 7, dus toen ik lezen over een soortgelijk ding genaamd 'Turtle', ik natuurlijk sceptis
Turtle Graphics

Turtle Graphics

* VOOR HET UITVOEREN VAN DIT MOET U INSTALLEER PYTHONOpen Turtle.pyAls u wilt dit gewoon bewerken openen met Kladblok
Arduino TFT oscilliscope

Arduino TFT oscilliscope

Dit is mijn video op het maken van een arduino-oscilliscope. De oscilliscope was vrij goedkoop, dus veel plezier. Hoewel het een beetje ruw, doet het het werk. Een paar dingen in gedachten te houden:1.) gebruik 10 uf condensator2.) gebruik een ohm be
Uw afbeelding op een Arduino! -TFT LCD scherm gids

Uw afbeelding op een Arduino! -TFT LCD scherm gids

heb je ooit gehoord van TFT LCD-schermen?  Ze zijn grote manieren om gegevens uit je Arduino worden weergegeven, of afbeeldingen worden weergegeven.  Het Arduino team zojuist een officiële TFT LCD-scherm met hun nieuwe Robot op Maker Faire 2013.  Het
Arduino "Talking" Temp / vochtigheid op een TFT-LCD w / Relais

Arduino "Talking" Temp / vochtigheid op een TFT-LCD w / Relais

Uit het brein van de http://arduinotronics.blogspot.comUPDATE: Toegevoegd onze SpeakEasy Text-To-Speech (TTS)-Shield zodat deze een weerstation "Praten"!UPDATE: Toegevoegd een 4 poort relais boord voor apparaatbesturingUPDATE: Toegevoegd dauwpun
Arduino tekening Robot

Arduino tekening Robot

Ik heb ontworpen dit project voor een 10-uur durende workshop voor ChickTech.org waarvan het doel is om teenage vrouwen kennismaken met onderwerpen van de stam. De doelen voor dit project waren:Gemakkelijk op te bouwen.Eenvoudig te programmeren.Deed