Jeffrey Cross
Jeffrey Cross

Kódové pole: Prozkoumejte rekurzi pomocí zpracování

Rekurze je důležitá programovací technika, která se hodí k různým oblastem, v neposlední řadě k vytváření zajímavých vizuálních obrazů. Stručně řečeno, rekurze je technika pro rozdělení složitého problému do menších a jednodušších verzí sebe sama (toto se nazývá „rekurzivní krok“), dokud problém není triviální k řešení (tento triviální případ se nazývá „základní případ“). Tento Codebox různých náčrtků, které vám pomohou prozkoumat tuto zábavnou a zajímavou techniku ​​pomocí jednoduchých geometrických pojmů.

Mnoho umělců použilo rekurzivní témata v jejich práci, zvláště M.C. Escher a Rene Magritte. Tato první skica ukazuje, jak vytvářet obrazy ve stylu Pieta Mondriana, který je nejznámější pro své skladby barevných obdélníků.

Následující program používá rekurzi k vytvoření faux-Mondrian. Základní případ je jednoduchý: vše, co musíte udělat, je nakreslit vyplněný obdélník se silným černým okrajem; Barva obdélníku je vybrána z malé sady primárních barev (červená, bílá, žlutá atd.). Rekurzivním krokem je rozbít tento obdélník (a všechny následující obdélníky) na 4 menší obdélníky výběrem náhodného bodu v jeho vnitřku. Následující obrázek by vám měl představit, jak to funguje:

Výstup bude vypadat takto:

Konečně je zde skica, mondrian.pde:

piet () Funkce je srdcem programu a ilustruje, jak funguje většina rekurzivních programů. Tady to je:

// Nakreslete obraz inspirovaný Mondrianem pomocí rekurze void piet (int x0, int y0, int x1, int y1, int N) {if (N == 0) {// Základní případ - nakreslete barevný obdélník s tlustým černý okraj int sw = 3; // toto je šířka zdvihu pro obdélníkovou barvu c [] = {# ff0000, # 00ff00, # 0000ff, # ffff00, #ffffff}; // Mondrianova barva palatte (c [int (náhodné (c.length))]); liftWeight (sw); rect (x0, y0, x1-x0-sw, y1-y0-sw); } else {// Rekurzivní krok - rozbije aktuální obdélník do 4 nových náhodných obdélníků int i = int (náhodně (x0, x1)); int j = int (náhodné (y0, y1)); piet (xo, yo, i, j, N-1); // horní levý obdélník piet (i, y0, x1, j, N-1); // pravý obdélník piet (x0, j, i, y1, N-1); // levý levý obdélník piet (i, j, x1, y1, N-1); // pravý pravý dolní roh}}

Funkce akceptuje 5 argumentů: souřadnice levého horního rohu obdélníku (x0 a y0), souřadnice pravého dolního rohu (x1 a x2) a aktuální rekurzivní hloubku (N). Funkce vykonává dvě základní věci. Nejprve testuje, zda je dosaženo „základního případu“, když N = 0. Pokud ano, pak stačí udělat obdélník, který je náhodně zbarven ze základní palety barev Mondrian (červená, chamtivost, modrá, žlutá). a bílá). Pokud to není základní případ, pak vybere náhodný bod (i, j) uvnitř aktuálního obdélníku a poté zavolá piet () 4 krát vícekrát prochází v různých souřadnicích, které tvoří 4 nové vnitřní obdélníky. Tento přístup „dělení a dobývání“, který má funkci, která se nazývá, je charakteristickým znakem rekurze.

Jednoduché rekurzivní procesy se často používají k vytváření přirozeně vypadajících objektů. Můžeme například vytvořit přirozeně vypadající rostlinu pomocí následujícího jednoduchého rekurzivního procesu, kde každá „rostlina“ začíná jako přímka. Tato linka je nahrazena novou „pobočkou“, která se skládá z původní linie a 3-4 nových střídavých větví. (Přesný počet větví je určen proměnnou, kterou můžete nastavit). Stejný proces je rekurzivně aplikován pro každou novou pobočku až do hloubky, kterou zadáte. Následující obrázek znázorňuje základní myšlenku:

Řádky jsou reprezentovány jako vektory. Vektor se skládá z počátečního bodu definovaného proměnnými x a y, délkou definovanou proměnnou r a úhlem definovaným proměnnou theta. Následující obrázek ukazuje, jak tyto proměnné souvisí:

Tento obrázek ilustruje několik jednoduchých „rostlin“ vytvořených tímto základním procesem:

Zde je skica, plant.pde:

Konečně bych byl bez obav bez toho, abych ukázal křivku Snowflake, jedné z nejznámějších rekurzivních postav. Základní případ je jednoduchý trojúhelník. Každá hrana je pak nahrazena novou sadou 4 úseček, které jsou 1/3 délky původního řádku. Opakovaně pak nahradíte každý z těchto nových segmentů novým segmentem 4 řádků (tento rekurzivní krok). Následující obrázek by vám měl poskytnout základní představu o procesu:

Výsledky vypadají takto:

Zde je skica, snowflake.pde. Všimněte si, že budete muset mít knihovnu přidanou k prvku controlP5 změnit rekurzivní hloubku (často označovanou jako N), abyste viděli, jak to ovlivní obraz. (Bohužel jsem musel omezit maximální rekurzivní hloubku na 6, spíše než na nekonečno, protože knihovna v současné době nepodporuje posuvné lišty, které přesahují obrazovku monitoru a do vzdálených oblastí známého vesmíru.)

Více: Podívejte se na všechny sloupce Codebox

V hale Maker:


Začínáme se zpracováním Naučte se programování počítače jednoduchým způsobem pomocí zpracování, což je jednoduchý jazyk, který umožňuje používat kód pro vytváření výkresů, animací a interaktivní grafiky. Kurzy programování obvykle začínají teorií, ale tato kniha vám umožňuje skočit přímo do kreativních a zábavných projektů. Je ideální pro každého, kdo se chce naučit základní programování a slouží jako jednoduchý úvod do grafiky pro lidi s některými programovacími dovednostmi.

Podíl

Zanechat Komentář