Obsah:

Mandelbrot a Julia nastavujú na ESP32: 4 kroky (s obrázkami)
Mandelbrot a Julia nastavujú na ESP32: 4 kroky (s obrázkami)

Video: Mandelbrot a Julia nastavujú na ESP32: 4 kroky (s obrázkami)

Video: Mandelbrot a Julia nastavujú na ESP32: 4 kroky (s obrázkami)
Video: Mandelbrot set, Julia set, both fractals or neither 2024, Júl
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čite poznáte fraktály, z ktorých najznámejší je Mandelbrotov súbor.

Tu je program, s ktorým sa môžete hrať na ESP32. Vybral som si ESP32, pretože si myslím, že bude vykonávať výpočty rýchlejšie ako štandardné Arduino (vyššia taktovacia frekvencia: 240 MHz): na výpočet a zobrazenie zhruba sekundu až sekundu a pol.

Kód sa zobrazuje na dotykovej obrazovke TFT s rozlíšením 480 x 320 pixlov. Vypočíta sady Mandelbrot a Julia pre niekoľko hodnôt parametrov a umožní vám priblížiť oblasti záujmu, aby ste videli fraktálny aspekt (t.j. prítomnosť rovnakých štruktúr pri každej zmene mierky). Úroveň priblíženia je obmedzená z dôvodu obmedzenej presnosti výpočtov, ale pred degradáciou snímky je možné vykonať pol tucta priblížení.

Pripravte sa na objavovanie magického sveta fraktálov …

Krok 1: Čo sú sady Mandelbrot a Julia?

Aké sú sady Mandelbrot a Julia?
Aké sú sady Mandelbrot a Julia?
Aké sú sady Mandelbrot a Julia?
Aké sú sady Mandelbrot a Julia?
Aké sú sady Mandelbrot a Julia?
Aké sú sady Mandelbrot a Julia?

Sada Mandelbrot je pomenovaná po Benoitovi Mandelbrotovi (1924-2010), francúzskom a americkom matematikovi, ktorý sa venoval pionnerským prácam vo fraktálnej geometrii, ktorú na konci 19. storočia iniciovali okrem iného Peano, Sierpinski a Julia.

Čo sú to fraktálne objekty?

Nepravidelnosti prírody, ktoré môžu pôsobiť chaoticky, napríklad línia morského pobrežia, tvar mrakov, strom, sú v skutočnosti výrazom veľmi komplexnej geometrie v meniacom sa meradle. V tomto kontexte pojem zlomkovej dimenzie nahrádza pojem obvyklej euklidovskej dimenzie (ktorá je vždy celé číslo)!

Fraktálny objekt je taký, že akákoľvek jeho časť je identická s celkom (tomu sa hovorí podobnosť): jeho štruktúra je invariantná podľa zmeny mierky.

Termín „fraktál“je neologizmus, ktorý vytvoril Benoît Mandelbrot v roku 1974 z latinského root fractus, čo znamená „zlomený“, „nepravidelný“. Je to podstatné meno aj prídavné meno. Mnoho prírodných javov - ako napríklad obrys pobrežia alebo vzhľad kapusty Romanesco (pozri obrázok) - má približné fraktálne tvary.

Benoît Mandelbrot mal trochu netypickú kariéru: po vyučovaní na univerzite v Lille (Francúzsko) zaujal miesto v IBM, kde sa rýchlo stal členom IBM, čo mu dávalo veľkú voľnosť pre jeho vedecké štúdie. Začiatkom 80. rokov 20. storočia, potom, čo opustil IBM, sa stal profesorom na Harvarde, ale natrvalo sa usadil na Yale.

Jeho práca v šesťdesiatych a na začiatku sedemdesiatych rokov ho priviedla k publikovaniu slávneho článku s názvom „Fraktálne objekty“, v ktorom ukázal, že tieto objekty, ktoré veľká časť matematickej komunity považuje za obyčajné kuriozity, sa nachádzajú všade v prírode. Uviedol množstvo príkladov v najrozmanitejších oblastiach, ako je fyzika, hydrológia, financie, meteorológia, geografia, geológia, metalurgia….

Čo je sada Mandelbrot?

Na začiatok povedzme, že je to pekná kresba vygenerovaná programom. A tento program je celkom jednoduchý. Existuje veľa počítačom generovaných kresieb a veľa počítačového softvéru na ich generovanie. Čím je teda tento zvláštny? Po prvé, sada Mandelbrot je podmnožinou plánu, zbierkou bodov. Obsahuje oblasti, ale aj hladké krivky, vlákna, body, z ktorých vychádza viacero vetiev, a ďalšie veci. Za druhé: je to skutočne fascinujúce a má veľmi zaujímavú históriu.

Na začiatku 20. storočia vyvinuli francúzski matematici Pierre Fatou a Gaston Julia subdoménu matematiky nazývanú holomorfná dynamika. Zaujímali sa o konkrétne funkcie pôsobiace na čísla pomocou niektorých z najjednoduchších dostupných vzorcov. Príslušné čísla sú komplexné čísla, veličiny reprezentované dvoma súradnicami (rovnako ako body roviny) nazývané skutočné a imaginárne časti. V 16. storočí ich vynašli matematici, aby pomohli nájsť korene polynómov a riešenie rovníc, ale našli široké a hlboké uplatnenie v matematike a fyzikálnych vedách. Môžeme pridať 2 komplexné čísla, vynásobiť ich alebo rozdeliť a robiť mnoho ďalších vecí. Fatou a Julia študovali vlastnosti určitých dynamických systémov, kde sa komplexné číslo líši podľa jednoduchého pravidla, ktoré sa opakuje znova a znova: tu nie je potrebná zložitá matematika. (takže prvý obrázok môžete zabudnúť …). Odhalili bohatstvo týchto systémov, definovali súbory, ktoré sa teraz nazývajú Juliine sady, a skúmali ich podobnosť, teda fraktálny aspekt … ale slovo v tom čase neexistovalo, pretože ho vymyslel až oveľa neskôr… Benoît Mandelbrot!

Po práci zakladateľov táto doména upadla do zabudnutia. Keď počítače dorazili, pomohli preskúmať mnoho matematických javov vyžadujúcich intenzívne výpočty, vrátane domény otvorenej Juliou a Fatouom. Keď sa teda Benoît Mandelbrot v 80. rokoch minulého storočia rozhodol použiť počítače IBM na reprezentáciu určitej matematickej sady súvisiacej s holomorfnou dynamikou., získal veľmi atraktívnu a veľmi pútavú kresbu (prvý obrázok predchádzajúcej časti).

Čo predstavuje sada Mandelbrot? V zásade je s každým bodom obrázku spojený dynamický systém. Súradnice bodu slúžia ako nastaviteľný parameter. Rôzne body zodpovedajú rôznym súborom Júlie a v závislosti od ich správania sa môžeme rozhodnúť zafarbiť bod konkrétnym spôsobom. Sada Mandelbrot je množina parametrov, pre ktoré má systém určitú vlastnosť.

Ako vypočítať sady Mandelbrot a Julia?

Musíme ísť trochu podrobnejšie na to, ako tieto sady vypočítať. Sady Mandelbrota a Julie sa vypočítajú opakovanou iteráciou jednoduchého vzorca, v našom prípade z^n+c. z je komplexné číslo, ktoré predstavuje súradnice bodu na displeji. je celočíselný exponent, takže z^n sa rovná z vynásobenému n -krát a c je konštanta.

Pre množinu Mandelbrot pre všetky body v oblasti zobrazenia inicializujeme z na 0. Konštanta c sa rovná hodnote súradníc uvažovaného bodu a vzorec sa opakuje.

Tu platí pravidlo: bod je súčasťou množiny, ak sa opakovaná aplikácia tohto vzorca nelíši (t. J. Nevedie k výpočtom smerom k veľkým číslam). Matematicky je možné dokázať, že ak výsledok vzorca prekročí 2 (v module, pretože hovoríme o komplexných číslach), iterácia sa bude líšiť. Aby sme rýchlo získali pekné farby, zastavíme iteráciu, keď modul výsledku presiahne 2 a farba zodpovedá číslu tejto konkrétnej iterácie. Ak sa počet iterácií stane príliš veľkým (teda ak je bod súčasťou Mandelbrotovej sady), zastavíme za daným prahom a priradíme k tomuto bodu čiernu farbu.

Séria Julia sa počíta podobným spôsobom, ale výpočty sa neinicializujú na 0, ale na hodnotu súradníc uvažovaného bodu a konštanta c je zvolená užívateľom a zostáva rovnaká pre celý obrázok.

To je všetko, dúfam, že je to jasné … Tieto vysvetlenia pomáhajú lepšie porozumieť zvyšku návodu na použitie.

Krok 2: Čo potrebujete?

Čo potrebuješ?
Čo potrebuješ?
Čo potrebuješ?
Čo potrebuješ?
Čo potrebuješ?
Čo potrebuješ?
Čo potrebuješ?
Čo potrebuješ?

Kusovník:

  • 1 doska ESP32
  • 1 TFT displej s dotykovým displejom a dotykovým perom
  • 1 doska a drôty

To je všetko. Celkové náklady do 10 USD.

Espressif ESP32 je dvojjadrový mikrokontrolér s frekvenciou 240 MHz, čo z neho robí dobrého kandidáta na rýchle a komplexné opakujúce sa výpočty. Má kapacity WiFi a Bluetooth, ktoré v tomto projekte nepoužívam.

Sada inštrukcií má veľkosť 32 bitov. Výpočet so 16 a 32 bitovými premennými je veľmi rýchly, čo umožňuje presné výpočty, ktoré sú zásadné pre účely priblíženia. V tejto aplikácii je pre displej s rozlíšením 320 x 240 obraz zhruba vytvorený zo 75 000 pixelov, z ktorých každý je vypočítaný iteračným procesom, ktorý môže bežať až 100 -krát. To môže viesť k 7 500 000 jednotkovým výpočtom, z ktorých každý je umocnením, t.j. niekoľkými násobeniami…

Rýchlosť výpočtu je tu zásadná, ale presnosť je zásadná. Čím viac priblížite, tým menšia je veľkosť časti sady na zobrazenie. To znamená, že každý z 320 x 240 pixelov obrázku predstavuje číslo, ktoré je veľmi blízko svojim susedom. So zvyšujúcim sa priblížením sa táto blízkosť zvyšuje.

Fraktálne obrázky však majú túto vlastnosť, že škálovaním zostávajú nezmenené. Malé detaily sa teda zobrazujú všade a pre akýkoľvek faktor mierky. Hlavný tvar sady Mandelbrot, ako je vidieť na displeji na vyššie uvedenom obrázku, nájdete niekde inde v oveľa menšej verzii a zobrazí sa, ak dostatočne priblížite (pozri na videu). Ale ak je rozdiel súradníc medzi dvoma susednými pixelmi príliš malý na to, aby umožnil ESP32 zachytiť ich rozdiel v správaní, z dôvodu nepresnosti nie je možné fraktálny efekt zobraziť …

Na zaistenie dobrej presnosti kód používa plaváky, ktoré sú v 32 bitoch kódované systémom ESP32. To umožňuje až 6 alebo 7 úrovní priblíženia. Použitie dvojitej presnosti (64 bitov) by zvýšilo túto hĺbku priblíženia za cenu pomalších výpočtov, teda dlhších časov medzi 2 obrázkami.

Aby to malo dvojnásobnú presnosť, stačí v kóde zmeniť všetky výskyty výrazu „float“na „double“a kód spustiť. Nedávno som vyrobil verziu pre väčší displej (HVGA 480 x 320 pixelov): zobrazenie 16 bitov trvá 3 sekundy, kým zobrazenie obrázka trvá, a zdvojnásobenie trvá 10 až 20 sekúnd (3 až 6 -krát dlhšie), ale podporuje viac ako 15 úrovní priblíženia.. Tretí obrázok v tejto kapitole zobrazuje úroveň priblíženia 14 v pravej časti sady Mandelbrot.

Ako pripojiť displej:

Použil som zobrazenie SPI a parametre sú nastavené v súbore User_Setup.h (v priečinku knižnice TFT_eSPI):

  • Ovládač: odkomentujte správny ovládač pre vašu obrazovku. Môj bol #define RPI_ILI9486_DRIVER
  • Čísla pinov: prejdite do sekcie ESP32 súboru a zvoľte

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Ovládací kolík výberu čipu
    • #define TFT_DC 2 // Riadiaci kolík dátového príkazu
    • #define TFT_RST 4 // Reset pin (dá sa pripojiť na pin RST)
    • #define TOUCH_CS 22 // Čip na výber čipu (T_CS) dotykovej obrazovky
  • Písma: nie je potrebné ich meniť
  • Ďalšie možnosti: Vybral som nasledujúce

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

Všetky ostatné riadky súboru sú komentované.

Kalibrujte dotykovú kapacitu displeja

Ak výber časti obrazovky alebo tlačidla nie je presný alebo dokonca úplne nesprávny, spustite náčrt kalibrácie dotyku z knižnice TFT_eSPI a skopírujte / prilepte kód, ktorý poskytuje pole (pre orientáciu displeja použite správnu hodnotu., 1 alebo 3 pre krajinu).

Krok 3: Program ESP32

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

Kód sa zobrazuje na dotykovej obrazovke TFT s rozlíšením 320 x 240 pixlov a používa knižnicu TFT_eSPI. Vypočíta sady Mandelbrot a Julia pre niekoľko hodnôt exponentu a umožní vám priblížiť oblasti záujmu, aby ste videli fraktálny aspekt (t.j. prítomnosť rovnakých štruktúr pri každej zmene mierky).

Priložený kód je verzia pre displej s rozlíšením 480 x 320. V tejto verzii môžete zmeniť veľkosť (šírku a výšku v pixeloch) displeja. Knižnica TFT_eSPI definuje pripojenia v inštalačnom súbore (priloženom), ktorý musí byť vložený do adresára knižnice.

Kód začína zobrazením návodu na obsluhu (pozri obrázok a video)

Väčšina obrazovky je vyhradená na zobrazenie obrázkov, dotykové tlačidlá sú k dispozícii na pravej strane obrazovky:

  • R: vykoná „reset“, t.j. e. zobrazí obrázok v maximálnej mierke,
  • U: „vrátiť späť“vám umožní vrátiť sa na predchádzajúci krok (ak nie je oblasť priblíženia zaujímavá, môžete si na priblíženie vybrať inú časť obrázku),
  • M alebo J: umožňuje vám prepnúť z Mandelbrotovej sady na Juliinu a naopak.

Menovky niektorých klávesov sa menia podľa kontextu: zobrazujú funkciu, ktorá sa vykoná po stlačení. Ak teda aktuálne zobrazujete sadu Mandelbrot, kláves M/J zobrazuje J, pretože keď ju stlačíte, zobrazí sa vám Júliina sada (a naopak).

To isté platí pre výber farebnej palety. Začíname so zelenou paletou. Kľúč navrhuje nasledujúcu paletu (modrú). Palety sú: červená, zelená, modrá, sivá, paleta 1, paleta 2 a späť na červenú. Posledné dva sú viacfarebné testy paliet, ktoré poskytujú väčší kontrast a umožňujú lepšie vidieť niektoré detaily.

Kľúč s číslom vám umožňuje vybrať exponent n v slučke od 2 do 7 (a späť do 2). V rovnakom duchu zobrazuje 3, ak ste práve na 2…

Nakoniec, pri zobrazení sady Julia, je potrebné zvoliť hodnotu konštanty c: kláves C to umožňuje, vďaka voliču (pozri druhý obrázok). Hodnota tejto konštanty sa zobrazuje spolu so súpravou.

Kliknutím na obrázok sa zvolený bod priblíži. V mieste dotyku sa zobrazí malý kruh a obdĺžnik zvýrazní priblíženú zónu sady.

Tretí obrázok ukazuje, že výpočtové časy zostávajú medzi 0,8 a 1,2 sekundy pre 320 x 240 pixelov, čo uľahčuje priblíženie a zobrazenie. Dosiahne 3 sekundy pri rozlíšení 480 x 320 pixelov, ale poskytne ďalšie podrobnosti.

Krok 4: Niektoré obrázky sú vysvetlené…

Niektoré obrázky vysvetlené…
Niektoré obrázky vysvetlené…
Niektoré obrázky vysvetlené…
Niektoré obrázky vysvetlené…
Niektoré obrázky vysvetlené…
Niektoré obrázky vysvetlené…

Najväčším obrazom je dobre známa sada Mandelbrot. Komplexné čísla použité na tomto obrázku sa pohybujú od -2,1 do +0,7 na osi x a -1,2 až 1,2 na súradnici. Ak priblížite úplne ľavú časť tohto prvého obrázku, je pravdepodobné, že konečne získate druhý, ktorý zobrazuje menšiu verziu pôvodnej sady, ktorá sa nachádza v ľavom konci sady. Pri oboch týchto obrázkoch sa exponent ('n') rovná 2: to je hodnota, ktorá sa bežne používa na zobrazenie Mandelbrotových množín.

Ak zmeníte túto hodnotu na 3 (stačí kliknúť na kláves s výrazom 3), dostanete tretí obrázok. Jeden zrejmý rozdiel je faktor symetrie: n = 2 dáva osovú symetriu (tj. Množina je symetrická voči strednej horizontálnej osi), ale pri n = 3 sa obraz stane nemenným otočením o 120 ° (jedna tretina 360 °, otočenie faktor symetrie 3). A zachováva si svoje fraktálne vlastnosti, ktoré si môžete overiť priblížením okrajov čierneho tvaru.

Štvrtý obrázok je sada Julie získaná po zvolení hodnoty koeficientu rovnajúcej sa 0,414 na osi x a 0,09 na súradnici. Zvolí sa červená paleta, ako je vidieť na zelenom tlačidle vpravo (zelená, ktorá je ďalšou zvolenou farbou). Piaty obrázok zobrazuje rovnaký druh sady Júlie, ktorá je vyššou imaginárnou súčasťou konštanty (0,358).

Dúfam, že sa vám bude hrať s týmto programom a že budete môcť zobrazovať pekné obrázky fraktálov. Neváhajte preskúmať sady Mandelbrot a Julia a pohrať sa s paletami: pomáhajú identifikovať niektoré detaily, ktoré pri jednoduchých monochromatických farbách nemusia byť viditeľné. Môžete dokonca objaviť niektoré fraktálne krajiny, ktoré nikto pred vami nikdy nevidel …

_

Chcete objaviť ďalšie fraktálne obrázky? Kliknite sem alebo si prezrite fraktálne umenie alebo dokonca fraktál ascii. Možno vďaka tomuto návodu budete chcieť vytvárať také skvelé obrázky …

Vyrobené s matematickou súťažou
Vyrobené s matematickou súťažou
Vyrobené s matematickou súťažou
Vyrobené s matematickou súťažou

Druhá cena v súťaži Made with Math

Odporúča: