Obsah:

Mandelbrot a Julia nastavují na ESP32: 4 kroky (s obrázky)
Mandelbrot a Julia nastavují na ESP32: 4 kroky (s obrázky)

Video: Mandelbrot a Julia nastavují na ESP32: 4 kroky (s obrázky)

Video: Mandelbrot a Julia nastavují na ESP32: 4 kroky (s obrázky)
Video: Mandelbrot set, Julia set, both fractals or neither 2024, Červenec
Anonim
Image
Image
Mandelbrot a Julia nastavují na ESP32
Mandelbrot a Julia nastavují na ESP32
Mandelbrot a Julia nastavují na ESP32
Mandelbrot a Julia nastavují na ESP32

Určitě znáte fraktály, z nichž nejznámější je Mandelbrotova množina.

Zde je program, se kterým si můžete hrát na ESP32. Vybral jsem si ESP32, protože si myslím, že bude provádět výpočty rychleji než standardní Arduino (vyšší taktovací frekvence: 240 MHz): asi sekundu až sekundu a půl pro výpočet a zobrazení.

Kód se zobrazuje na dotykové obrazovce TFT 480 x 320. Vypočítává sady Mandelbrot a Julia pro několik hodnot parametrů a umožňuje vám přiblížit oblasti zájmu, abyste viděli fraktální aspekt (tj. Přítomnost stejných struktur při každé změně měřítka). Úroveň přiblížení je omezená kvůli omezené přesnosti výpočtů, ale před degradací obrazu lze provést půl tuctu přiblížení.

Připravte se prozkoumat kouzelný svět fraktálů …

Krok 1: Co jsou sady Mandelbrot a Julia?

Co jsou sady Mandelbrot a Julia?
Co jsou sady Mandelbrot a Julia?
Co jsou sady Mandelbrot a Julia?
Co jsou sady Mandelbrot a Julia?
Co jsou sady Mandelbrot a Julia?
Co jsou sady Mandelbrot a Julia?

Sada Mandelbrot je pojmenována po Benoitovi Mandelbrotovi (1924-2010), francouzském a americkém matematikovi, který prováděl průkopnické práce ve fraktální geometrii, kterou na konci 19. století zahájili mimo jiné Peano, Sierpinski a Julia.

Co jsou to fraktální objekty?

Nesrovnalosti přírody, které se mohou zdát chaotické, jako je linie mořského pobřeží, tvar mraků, strom, jsou ve skutečnosti výrazem velmi složité geometrie v měnícím se měřítku. V této souvislosti pojem zlomkové dimenze nahrazuje představu obvyklé euklidovské dimenze (což je vždy celé číslo)!

Fraktální objekt je takový, že jakákoli jeho část je identická s celkem (tomu se říká vlastní podobnost): její struktura je invariantní změnou měřítka.

Termín „fraktál“je neologismus vytvořený Benoîtem Mandelbrotem v roce 1974 z latinského root fractus, což znamená „zlomený“, „nepravidelný“. Je to jak podstatné jméno, tak přídavné jméno. Mnoho přírodních jevů - jako obrys pobřeží nebo vzhled zelí Romanesco (viz obrázek) - má přibližné fraktální tvary.

Benoît Mandelbrot měl poněkud atypickou kariéru: poté, co učil na univerzitě v Lille (Francie), zaujal místo v IBM, kde se rychle stal členem IBM, což mu poskytlo velkou svobodu pro jeho vědecká studia. Na začátku 80. let, poté, co opustil IBM, se stal profesorem na Harvardu, ale natrvalo se usadil na Yale.

Jeho práce v šedesátých a na začátku sedmdesátých let ho vedla k vydání slavného článku s názvem „Fraktální objekty“, ve kterém ukázal, že tyto objekty, které velká část matematické komunity považuje za pouhé kuriozity, se nacházejí všude v přírodě. Dal mnoho příkladů z celé řady oblastí, jako je fyzika, hydrologie, finance, meteorologie, geografie, geologie, metalurgie….

Co je sada Mandelbrot?

Na začátek si řekněme, že je to pěkná kresba vygenerovaná programem. A tento program je docela jednoduchý. Existuje mnoho počítačem generovaných kreseb a mnoho počítačového softwaru pro jejich generování. Co je na tomhle tak zvláštního? Za prvé, sada Mandelbrot je podmnožinou plánu, sbírkou bodů. Obsahuje oblasti, ale také hladké křivky, vlákna, body, ze kterých vychází více větví, a další věci. Za druhé: je to opravdu fascinující a má velmi zajímavou historii.

Na počátku 20. století vyvinuli francouzští matematici Pierre Fatou a Gaston Julia subdoménu matematiky nazývanou holomorfní dynamika. Zajímali se o konkrétní funkce, působící na čísla, pomocí některých nejjednodušších dostupných vzorců. Dotyčná čísla jsou komplexní čísla, veličiny reprezentované dvěma souřadnicemi (stejně jako body roviny) nazývané reálné a imaginární části. Byly vynalezeny v 16. století matematiky, aby pomohly najít kořeny polynomů a řešení rovnic, ale našly široké a hluboké aplikace v matematice a fyzikálních vědách. Můžeme přidat 2 komplexní čísla, znásobit je nebo rozdělit a dělat mnoho dalších věcí. Fatou a Julia studovali vlastnosti určitých dynamických systémů, kde se složité číslo mění podle jednoduchého pravidla, které se opakuje znovu a znovu: zde není třeba složité matematiky (takže první obrázek můžete zapomenout …). Odhalili bohatství těchto systémů, definovali soubory, které se nyní nazývají Juliiny sady, a studovaly jejich podobnost, tedy fraktální aspekt … ale slovo v té době neexistovalo, protože bylo vynalezeno až mnohem později, … Benoîtem Mandelbrotem!

Po práci zakladatelů tato doména upadla v zapomnění. Když počítače dorazily, pomohly prozkoumat mnoho matematických jevů vyžadujících intenzivní výpočetní techniku, včetně domény otevřené Julií a Fatou. Když se tedy Benoît Mandelbrot v 80. letech rozhodl použít počítače IBM k reprezentaci určité matematické sady související s holomorfní dynamikou, získal velmi atraktivní a velmi poutavou kresbu (první obrázek předchozí části).

Co představuje sada Mandelbrot? V zásadě je s každým bodem obrazu spojen základní dynamický systém. Souřadnice bodu fungují jako nastavitelný parametr. Různé body odpovídají různým sadám Julie a v závislosti na jejich chování se můžeme rozhodnout bod vybarvit určitým způsobem. Sada Mandelbrot je sada parametrů, pro které má systém určitou vlastnost.

Jak vypočítat sady Mandelbrot a Julia?

Musíme jít trochu podrobněji na to, jak tyto sady vypočítat. Sady Mandelbrot a Julia se počítají opakovanou iterací jednoduchého vzorce, v našem případě z^n+c. z je komplexní číslo, které představuje souřadnice bodu na displeji. je celočíselný exponent, takže z^n se rovná z vynásobené n nkrát a c je konstanta.

Pro množinu Mandelbrot pro všechny body v oblasti zobrazení inicializujeme z na 0. Konstanta c se považuje za rovnou hodnotě souřadnic uvažovaného bodu a vzorec se iteruje.

Zde platí pravidlo: bod je součástí množiny, pokud se opakovaná aplikace tohoto vzorce neliší (tj. Nevede k výpočtům směrem k velkým číslům). Matematicky lze ukázat, že pokud výsledek vzorce překročí 2 (v modulu, protože mluvíme o komplexních číslech), iterace se bude rozcházet. Abychom rychle získali hezké barvy, zastavíme iteraci, když modul výsledku přesáhne 2 a barva odpovídá číslu této konkrétní iterace. Pokud se počet iterací stane příliš velkým (takže pokud je bod součástí Mandelbrotovy sady), zastavíme se po daném prahu a přidružíme k tomuto bodu černou barvu.

Sada Julia se počítá podobným způsobem, ale výpočty nejsou inicializovány na 0, ale na hodnotě souřadnic uvažovaného bodu a konstanta c je zvolena uživatelem a zůstává stejná pro celý obrázek.

To je vše, doufám, že je to jasné … Tato vysvětlení pomáhají lépe porozumět ostatním návodům k použití.

Krok 2: Co potřebujete?

Co potřebuješ?
Co potřebuješ?
Co potřebuješ?
Co potřebuješ?
Co potřebuješ?
Co potřebuješ?
Co potřebuješ?
Co potřebuješ?

Kusovník:

  • 1 deska ESP32
  • 1 TFT displej s dotykovým displejem a stylusem
  • 1 prkénko a dráty

A je to. Celkové náklady pod 10 USD.

Espressif ESP32 je dvoujádrový mikrokontrolér běžící na frekvenci 240 MHz, což z něj činí dobrého kandidáta na rychlé a komplexní opakované výpočty. Má kapacity WiFi a Bluetooth, které v tomto projektu nepoužívám.

Sada instrukcí má velikost 32 bitů. Výpočet se 16 a 32 bitovými proměnnými je velmi rychlý, což umožňuje přesné výpočty, což je zásadní pro účely přiblížení. V této aplikaci je pro displej 320 x 240 obraz zhruba vytvořen ze 75 000 pixelů, z nichž každý je vypočítán iteračním procesem, který může běžet až 100krát. To může vést k 7 500 000 jednotkových výpočtů, z nichž každý je umocněním, tj. Několika násobeními…

Rychlost výpočtu je zde zásadní, ale přesnost je zásadní. Čím více přiblížíte, tím menší bude velikost části sady k zobrazení. To znamená, že každý z 320 x 240 pixelů obrázku představuje číslo, které je velmi blízko jeho sousedům. Jak se zoom zvětšuje, tato blízkost se zvyšuje.

Ale fraktální obrazy mají tuto vlastnost, že zůstávají beze změny škálováním. Malé detaily se tedy objevují všude a pro jakýkoli faktor škálování. Hlavní tvar sady Mandelbrot, jak je vidět na displeji na výše uvedeném obrázku, lze najít někde jinde v mnohem menší verzi a zobrazí se, pokud dostatečně přiblížíte (viz video). Pokud je ale rozdíl souřadnic mezi dvěma sousedními pixely příliš malý na to, aby umožnil ESP32 zachytit jejich rozdíl v chování, kvůli nedostatečné přesnosti nelze fraktální efekt zobrazit …

Abyste získali dobrou přesnost, kód používá plováky, které jsou kódovány v 32 bitech ESP32. To umožňuje až 6 nebo 7 úrovní přiblížení. Použití dvojité přesnosti (64 bitů) by zvýšilo tuto hloubku zoomu za cenu pomalejších výpočtů, tedy delší doby mezi 2 snímky.

Aby to mělo dvojnásobnou přesnost, stačí v kódu změnit všechny výskyty „float“na „double“a spustit kód. Nedávno jsem vytvořil verzi pro větší displej (HVGA 480 x 320 pixelů): zobrazení 16 bitů trvá 3 sekundy, zobrazení dvou snímků trvá 10 až 20 sekund (3 až 6krát déle), ale podporuje více než 15 úrovní zoomu. Třetí obrázek v této kapitole ukazuje úroveň zoomu 14 v pravé části Mandelbrotovy sady.

Jak připojit displej:

Použil jsem zobrazení SPI a parametry jsou nastaveny v souboru User_Setup.h (ve složce knihovny TFT_eSPI):

  • Ovladač: odkomentujte správný ovladač pro váš displej. Můj byl #define RPI_ILI9486_DRIVER
  • Čísla pinů: přejděte do části ESP32 souboru a vyberte

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Ovládací kolík pro výběr čipu
    • #define TFT_DC 2 // Ovládací kolík datového příkazu
    • #define TFT_RST 4 // Reset pin (lze připojit ke kolíku RST)
    • #define TOUCH_CS 22 // Čip pro výběr čipu (T_CS) dotykové obrazovky
  • Písma: není třeba je měnit
  • Další možnosti: Vybral jsem následující

    • #define SPI_FREQUENCY 20000000
    • #define SPI_READ_FREQUENCY 20000000
    • #define SPI_TOUCH_FREQUENCY 2500000

Všechny ostatní řádky souboru jsou okomentovány.

Kalibrujte dotykovou kapacitu displeje

Pokud výběr části obrazovky nebo tlačítka není přesný nebo dokonce úplně špatný, spusťte náčrt kalibrace dotyku z knihovny TFT_eSPI a zkopírujte / vložte do kódu pole, které poskytuje (nezapomeňte použít správnou hodnotu pro orientaci zobrazení, 1 nebo 3 pro krajinu).

Krok 3: Program ESP32

Program ESP32
Program ESP32
Program ESP32
Program ESP32
Program ESP32
Program ESP32

Kód se zobrazuje na dotykové obrazovce TFT 320 x 240 a používá knihovnu TFT_eSPI. Vypočítává sady Mandelbrot a Julia pro několik hodnot exponentů a umožňuje vám přiblížit oblasti zájmu, abyste viděli fraktální aspekt (tj. Přítomnost stejných struktur při každé změně měřítka).

Přiložený kód je verze pro displej s rozlišením 480 x 320. V této verzi můžete změnit velikost (šířku a výšku v pixelech) displeje. Knihovna TFT_eSPI definuje připojení v instalačním souboru (připojeném), který musí být vložen do adresáře knihovny.

Kód začíná zobrazením návodu k obsluze (viz obrázek a video)

Většina obrazovky je vyhrazena pro zobrazování obrázků, dotyková tlačítka jsou k dispozici na pravé straně obrazovky:

  • R: provede „reset“, tzn. E. zobrazí obrázek v jeho maximálním měřítku,
  • U: „undo“vám umožní vrátit se k předchozímu kroku (pokud není zvětšená oblast zajímavá, můžete si pro přiblížení vybrat jinou část obrázku),
  • M nebo J: umožňuje přepnout z Mandelbrotovy sady na Juliinu a naopak.

Popisky některých kláves se mění podle kontextu: zobrazují funkci, která bude po stisknutí provedena. Pokud tedy aktuálně zobrazujete sadu Mandelbrot, klávesa M/J zobrazí J, protože pokud ji stisknete, zobrazí se Juliina sada (a naopak).

Totéž platí pro výběr palety barev. Začínáme zelenou paletou. Klíč navrhuje další paletu (modrou). Palety jsou: červená, zelená, modrá, šedá, paleta 1, paleta 2 a zpět do červené. Poslední dva jsou vícebarevné testy palet, které poskytují větší kontrast a umožňují lépe vidět některé detaily.

Klíč s číslem vám umožňuje vybrat exponent n ve smyčce od 2 do 7 (a zpět na 2). Ve stejném duchu zobrazuje 3, pokud jste právě ve 2…

Nakonec je při zobrazení sady Julia nutné zvolit hodnotu konstanty c: klávesa C vám to díky voliči umožňuje (viz druhý obrázek). Hodnota této konstanty se zobrazí se sadou.

Kliknutím na obrázek se přiblíží vybraný bod. V místě dotyku se zobrazí malý kruh a obdélník zvýrazní zvětšenou zónu sady.

Třetí obrázek ukazuje, že výpočetní časy zůstávají mezi 0,8 a 1,2 sekundy pro 320 x 240 pixelů, což usnadňuje přiblížení a zobrazení. Dosahuje 3 sekund pro 480 x 320 pixelů, ale poskytuje více podrobností.

Krok 4: Některé obrázky vysvětleny…

Některé obrázky vysvětleny…
Některé obrázky vysvětleny…
Některé obrázky vysvětleny…
Některé obrázky vysvětleny…
Některé obrázky vysvětleny…
Některé obrázky vysvětleny…

Největší obrázek je dobře známá sada Mandelbrot. Komplexní čísla použitá v tomto obrázku se pohybují od -2,1 do +0,7 na přímce a -1,2 do 1,2 na souřadnici. Pokud přiblížíte úplně levou část tohoto prvního obrázku, je pravděpodobné, že konečně získáte druhý, který zobrazuje menší verzi původní sady, která se nachází v levém konci sady. U obou těchto obrázků je exponent ('n') roven 2: to je hodnota běžně používaná k zobrazení Mandelbrotových sad.

Pokud tuto hodnotu změníte na 3 (stačí kliknout na klávesu s nápisem 3), získáte třetí obrázek. Jedním zřejmým rozdílem je faktor symetrie: n = 2 dává osovou symetrii (tj. Množina je symetrická vůči střední horizontální ose), ale při n = 3 se obraz stává neměnným po otočení o 120 ° (jedna třetina 360 °, otočení součinitel symetrie 3). A zachovává si své fraktální vlastnosti, což můžete ověřit přiblížením okrajů černého tvaru.

Čtvrtý obrázek je Julia sada získaná po výběru hodnoty koeficientu rovnající se 0,414 na přímce a 0,09 na souřadnici. Je vybrána červená paleta, jak je vidět na zeleném tlačítku vpravo (zelená, což je další barva, která má být vybrána). Pátý obrázek zobrazuje stejný druh sady Julie, která je vyšší imaginární částí konstanty (0,358).

Doufám, že se vám bude hrát s tímto programem a že budete moci zobrazovat pěkné fraktální obrázky. Neváhejte prozkoumat sady Mandelbrot a Julia a pohrajte si s paletami: pomáhají identifikovat některé detaily, které u jednoduchých jednobarevných nemusí být vidět. Můžete dokonce objevit některé fraktální krajiny, které před vámi ještě nikdo neviděl …

_

Chcete objevit další fraktální obrázky? Klikněte sem nebo prozkoumejte fraktální umění nebo dokonce fraktál ascii. Možná, že díky tomuto instrukci budete chtít vytvářet tak skvělé obrázky …

Vyrobeno s matematickou soutěží
Vyrobeno s matematickou soutěží
Vyrobeno s matematickou soutěží
Vyrobeno s matematickou soutěží

Druhá cena v soutěži Made with Math

Doporučuje: