Jeffrey Cross
Jeffrey Cross

Kódové pole: Vytvořte fraktálový zvěřinec

Fraktál, podle Wikipedie, je „hrubý nebo fragmentovaný geometrický tvar, který lze rozdělit na části, z nichž každá je (alespoň přibližně) kopií celku se zmenšenou velikostí.“ Jednou z nejlepších věcí na fraktálech je, že používají skutečně jednoduché procesy k vytvoření opravdu složitých, přirozeně vypadajících objektů, jako jsou rostliny, mraky, plameny a tak dále. Tento Codebox vám ukáže, jak vytvořit fraktální zvěřinec pro prohlížení několika různých stylů fraktálů, jako je tento:

Po cestě budeme pokračovat v rozšiřování konceptů objektově orientovaného programování (OOP), které jsou představeny v kapitole 9 kapitoly Začínáme se zpracováním, a také ukázat, jak používat velkou knihovnu controlP5 k vytvoření známých ovládacích prvků grafického uživatelského rozhraní používaných v jiných jazycích .

IFS Fraktály

Iterovaný funkční systém, neboli IFS, je jednou z nejjednodušších metod pro vytváření přirozeně vypadajících fraktálů. IFS se skládá z několika transformací (více o nich za sekundu), které popisují, jak změnit jeden bod do druhého. Barnsley kapradina, který vypadá jako Black Spleenwort (druh kapradí), je klasický příklad IFS fraktálu, ale tam je mnoho rozmanitostí. Larry Riddle má na stránce systémů IFS pěkný rozpis ostatních.

Tato technika funguje takto. Počínaje jedním bodem, obvykle (0,0), náhodně použijete jednu z transformací, které tvoří systém IFS. Poté, jakmile máte nový, transformovaný bod, vykreslíte jej na obrazovku, kterou v procesu Zpracování provádíme soubor() příkaz. Zopakujte proces znovu od bodu, který jste právě vypočítali.

Po několika stech iteracích začnete vidět strašidelný obrys kapradí. Po 100 000 iteracích uvidíte detailní obraz, který vypadá téměř přesně jako přírodní objekt. Následující obrázek ukazuje systém IFS pro kapradinu Barnsley, stejně jako obraz, který vzniká při opakovaném použití procesu.

Rozbalme si detaily trochu víc. Transformace je vzorec, který… transformuje jeden bod do jiného. Stejně jako transformace překladu, otočení a měřítka popsané na stránce 104 Začínáme s zpracováním, transformace v systému IFS mapují bod na nové umístění použitím transformační matice, což je zkrácený způsob reprezentování sady vzorců .

Tabulka, která definuje systém IFS, poskytuje hodnoty použité v maticích. Sloupce a, b, d, d, e a f představují různé prvky v matici. (O sekundě mluvím o sloupci p.) Následující obrázek ukazuje, jak přeložit řádek v systému IFS do matice:

Jako příklad zde uvádíme třetí transformační matici pro Barnsley Fern, která byla ukázána dříve:

Poslední sloupec v matici IFS, p, představuje frekvenci, s níž je transformace vybrána. Pro Barnsleyovu kapradinu je tedy transformace f1 zvolena 1% času, f2 je vybráno 85% času a f3 a f4 jsou zvoleny vždy 7% času. Pokud je to trochu matoucí, pomyslete si, jako by jste naplnili tašku se 100 kuličkami, z nichž každá měla jednu z těchto funkcí. Měli byste mít 1 mramor pro f4, 85 pro f2, 7 pro f3 a 7 pro f4. Při každé iteraci náhodně uchopíte mramor z tašky, podíváte se na jeho štítek, aplikujete odpovídající transformaci a pak mramor vrátíte zpět do sáčku.

controlP5

Nyní, když jste pochopili základní myšlenku fraktálů IFS, pojďme se rychle podívat na controlP5, knihovnu kódů od Andrease Schlegla, pro vytvoření známých ovládacích prvků uživatelského vstupu, jako jsou tyto:

Použijeme ovládací prvek „knoflík“, který uživateli umožní nastavit počet iterací použitých k vytvoření výkresu a „radio“ ovládání pro výběr systému IFS, který se má zobrazit.

Než budeme moci použít knihovnu v náčrtu, musíme ji nainstalovat. Prvním krokem je, abyste měli v adresáři Sketchbook adresář nazvaný „knihovny“. Adresář Skicáře můžete najít otevřením okna Zpracování předvoleb. Název adresáře se zobrazí nahoře:

Po vyhledání hlavního adresáře použijte nástroj, jako je Průzkumník Windows, vyhledávač Mac nebo důvěryhodný terminál systému UNIX, abyste zjistili, zda existuje podadresář nazvaný „knihovny“. Pokud ano, jste nastaveni. Pokud ne, vytvořte podadresář (nezapomeňte jej pojmenovat „knihovny“).

Dále jste připraveni nainstalovat controlP5. Přejděte na hlavní stránku controlP5 a klikněte na odkaz pro stažení nejnovější verze knihovny. (Odkaz naleznete v zeleném poli v horní části obrazovky.) Po stažení souboru soubor dekomprimujte a soubory zkopírujte do podadresáře „knihovny“. Restart Processing a měli byste vidět knihovnu, která se objeví pod položkou menu „Skica -> Import Library“.

Po instalaci knihovny restartujte Zpracování. Teď jsme připraveni mluvit trochu o tom, co je to za fraktální stránku projektu.

Nastavte náčrt

Páni! To bylo spousta přehledného materiálu, ale nyní, když je nainstalováno controlP5, jsme připraveni použít Processing k implementaci systému IFS popsaného výše. Spusťte zpracování a vložte následující kód do textového editoru. (Jako vždy, můžete buď zvýraznit celý kód v následujícím poli a pak kliknout na ctrl_c, nebo můžete kliknout na tento odkaz na controlp5_fractals.pde a pak použít kombinaci ctrl + a, ctrl + c.) Zde je kódový kód:

Jedna věc, kterou si pravděpodobně všimnete, když si projdete příkladem: obsahuje několik definic tříd na konci souboru. V posledním Codeboxu, Swatu a (arraylistu) cílů jsme umístili všechny třídy do samostatných záložek. To ale není nutné - je naprosto v pořádku, když je všechny rozbalíme do jednoho souboru, jako jsem to udělal tady. Pokud je chcete rozdělit do samostatných záložek, nezapomeňte pojmenovat soubor stejně jako třída.

Zapněte kód a měli byste vidět něco velmi podobného videu na začátku tohoto příspěvku. Můžete kliknout na přepínače, abyste vybrali jeden z mnoha různých fraktálů IFS, a můžete také použít ovladač knoflíku pro nastavení počtu iterací.

Diskuse

Kód definuje tři třídy, které slouží jako stavební blok projektu:

  • Třída Transform. Tato třída provádí veškerou matematiku zapojenou do transformační matice. Většina kódu je věnována jednoduše ukládání všech proměnných. evalX () a evalY () vraťte nové souřadnice X a Y pro bod, kterým projdete.
  • Třída IFS. Tato třída implementuje datové struktury IFS. Skládá se z tříd ArrayList transformací, které se nazývají transformací, ArrayList reprezentuje frekvenční rozložení těchto transformací volal histogramu (rozšíření naší dřívější analogie, to je pytel kuliček, které použijeme k výběru náhodné transformace) a popis. Klíčové metody jsou: jsou addTransform (), která přidává novou transformaci přeměnit seznam; addHistogram (), který přidává nové "mramoru" histogramu rozložení frekvencí na základě transformace str hodnota; a vyberte možnost Náhodné transformace (), který se používá k volbě jedné z transformací náhodně na základě frekvenčního rozdělení specifikovaného v histogramu ArrayList.
  • Třída Point. Drží souřadnice x a y pro body ve fraktálu.

Tyto třídy používáme různými způsoby v hlavním programu. Za prvé, v tom, co je pravděpodobně nejvýraznější částí kódu, používáme IFS a Transform k definování různých fraktálů, které chceme zobrazit. Zde je například kód pro vytvoření Barnsley Fern:

c = nový IFS ("Classic Barnsley Fern"); c.addTransform (nová transformace (0,0, 0,0, 0,0, 0,16, 0,0, 0,0, 0,01)); c.addTransform (nová transformace (0,85, 0,04, -0,04, 0,85, 0,0, 1,6, 0,85)); c.addTransform (nová transformace (0,2, -0,26, 0,23, 0,22, 0,0, 1,6, 0,07)); c.addTransform (nová transformace (-0,15, 0,28, 0,26, 0,24, 0,0, 0,44, 0,07)); vzory.add (c);

A zde je kód, který definuje křivku Dragon:

c = nový IFS ("Dragon"); c.addTransform (nová transformace (0,5, -0,5, 0,5, 0,5, 0,0,0,0, 50)); c.addTransform (nová transformace (-0,5, -0,5,0,5, -0,5,1,0,0,0, 0,50)); vzory.add (c);

Dále nastavíme knoflík controlP5 a přepínač. To vyžaduje 2 dílčí kroky. První se vyskytuje v založit() metody, kde jsou tyto dva ovládací prvky přidány do náčrtu. Přidání knoflíku je poměrně jednoduché a vyžaduje pouze jeden řádek:

iteraceKnob = controlP5.addKnob ("iteraceKnob", N_MIN, N_MAX, N, 10,10,50);

Přepínač vyžaduje jen o něco více kódu, protože kromě přidání ovládacího prvku také musíme přidat položky, které lze vybrat. To se provádí smyčkou přes ArrayList IFS vzorů a poté pomocí popis jako položku výběru v přepínači. Zde je kód:

ifsRadio = controlP5.addRadio ("ifsSelect", 70,10); pro (int i = 0; i <pattern.size (); i ++) {IFS p = (IFS) patterns.get (i); ifsRadio.add (p.description, i); }

Druhá část použití knihovny controlP5 je nastavena akční metody které jsou spuštěny při interakci uživatele s ovládacím prvkem. Klíčem je dát metodě stejný název jako popis *, který jste použili při přidání ovládacího prvku, nikoli název proměnné instance ovládacího prvku. Například, když jsme přidali ifsRadio jsme použili ifsSelect jako popis. To znamená, že budeme potřebovat odpovídající metodu nazvanou ifsSelect () přijímat jakékoli kliknutí uživatelů na ovládací prvek. Tato metoda musí mít také parametr, který bude obsahovat aktuální hodnotu ovládacího prvku.

Takže, pro ifsSelect () metodu, máme parametr, který nám sdělí index vybrané položky seznamu. Tento index pak použijeme k načtení správného vzoru IFS a jeho zobrazení jako aktuálního. Následující diagram shrnuje všechny prvky ve hře. (Ovládací prvky controlP5 fungují mírně odlišně, ale stránky mají skvělé příklady, jak je používat všechny.):

Poslední kousek skládačky je makeIFS () metoda, která činí skutečné výpočty potřebné k vytvoření fraktálu. Vzhledem k tomu, že systémy IFS jsou tak elegantní, není moc co říct. Jednoduše se protáhneme počtem iterací uvedených v proměnné N (jehož hodnota byla nastavena pomocí. t iteraceKnob () metoda), vytáhněte transformaci z aktuálního systému IFS (jehož hodnota byla nastavena v. t ifsSelect () metodu) a pak přidejte každý bod do pole objektů Point. Sledujeme také rozsahy hodnot X a Y, abychom mohli zvětšit obraz tak, aby vyplnil kreslicí plochu.

Další: Zobrazit 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ář