Tartalomjegyzék:

Mandelbrot és Julia az ESP32 -n: 4 lépés (képekkel)
Mandelbrot és Julia az ESP32 -n: 4 lépés (képekkel)

Videó: Mandelbrot és Julia az ESP32 -n: 4 lépés (képekkel)

Videó: Mandelbrot és Julia az ESP32 -n: 4 lépés (képekkel)
Videó: #ENVIVO Reto de Programacion: Copo de Nieve #Processing 2024, Július
Anonim
Image
Image
Mandelbrot és Julia beállítja az ESP32 -t
Mandelbrot és Julia beállítja az ESP32 -t
Mandelbrot és Julia beállítja az ESP32 -t
Mandelbrot és Julia beállítja az ESP32 -t

Biztosan ismeri a fraktálokat, amelyek közül a leghíresebb a Mandelbrot -díszlet.

Itt van egy program, amellyel játszani lehet az ESP32 -en. Azért választottam az ESP32 -t, mert úgy gondolom, hogy gyorsabban végzi el a számításokat, mint egy szabványos Arduino (magasabb órajel -frekvencia: 240 MHz): körülbelül másodperctől másfélig a számításhoz és a megjelenítéshez.

A kód 480 x 320 TFT érintőképernyőn jelenik meg. Számítja ki a Mandelbrot és Julia halmazokat több paraméterértékre, és lehetővé teszi az érdeklődési körök nagyítását, hogy lássa a fraktál aspektust (azaz ugyanazon struktúrák jelenlétét minden skálaváltozásnál). A nagyítás szintje korlátozott a számítások pontossága miatt, de féltucat nagyítás végezhető el, mielőtt a kép romlik.

Készüljön fel a fraktálok varázslatos világának felfedezésére…

1. lépés: Mik azok a Mandelbrot és Julia készletek?

Mi az a Mandelbrot és Julia szett?
Mi az a Mandelbrot és Julia szett?
Mi az a Mandelbrot és Julia szett?
Mi az a Mandelbrot és Julia szett?
Mi az a Mandelbrot és Julia szett?
Mi az a Mandelbrot és Julia szett?

A Mandelbrot-készlet Benoit Mandelbrot (1924-2010), francia és amerikai matematikus nevéhez fűződik, aki a fraktálgeometria területén pionnering munkát végzett, amelyet a 19. század végén kezdeményezett többek között Peano, Sierpinski és Julia.

Mik azok a fraktál tárgyak?

A természet szabálytalanságai, amelyek kaotikusnak tűnhetnek, mint például a tengerparti vonal, a felhők, a fa alakja, valójában egy nagyon összetett geometria kifejeződése a változó léptékben. Ebben az összefüggésben a tört dimenzió fogalma felváltja a szokásos euklideszi dimenziót (amely mindig egész szám)!

A fraktál tárgy olyan, hogy annak bármely része azonos az egésszel (ezt nevezzük ön-hasonlóságnak): szerkezete változatlan a léptékváltozás miatt.

A "fraktál" kifejezés egy neologizmus, amelyet Benoît Mandelbrot hozott létre 1974 -ben a latin fraktuszgyökérből, és jelentése "törött", "szabálytalan". Ez főnév és melléknév is. Sok természeti jelenség - például a partvonalak körvonala vagy a Romanesco káposzta megjelenése (lásd a képet) - megközelítő fraktál alakú.

Benoît Mandelbrot karrierje kissé atipikus volt: a Lille -i Egyetemen (Franciaország) végzett tanítás után az IBM -nél vállalt pozíciót, ahol hamarosan IBM -ösztöndíjas lett, ami nagy szabadságot biztosított számára tudományos tanulmányai során. A nyolcvanas évek elején, miután elhagyta az IBM -t, a Harvard professzora lett, de végleg a Yale -ben telepedett le.

A hatvanas és a hetvenes évek elején végzett munkája nyomán egy híres cikket tett közzé "Fraktál tárgyak" címmel, amelyben megmutatta, hogy ezek a tárgyak, amelyeket a matematikai közösség nagy része puszta érdekességnek tart, mindenütt megtalálhatók a természetben. Sok példát mondott a legkülönfélébb területeken, mint például a fizika, a hidrológia, a pénzügy, a meteorológia, a földrajz, a geológia, a kohászat….

Mi a Mandelbrot készlet?

Kezdjük azzal, hogy ez egy szép rajz, amelyet egy program generált. És ez a program meglehetősen egyszerű. Sok számítógép által készített rajz és számos számítógépes szoftver létezik ezek előállításához. Szóval mi ebben a különleges? Először is, a Mandelbrot halmaz a terv részhalmaza, pontgyűjtemény. Tartalmaz területeket, de sima görbéket, szálakat, pontokat, ahonnan több ág árad, és egyéb dolgokat. Másodszor: valóban lenyűgöző, és nagyon érdekes története van.

A 20. század elején Pierre Fatou és Gaston Julia francia matematikusok kifejlesztették a matematika alterületét, az úgynevezett holomorf dinamikát. Érdeklődtek bizonyos funkciók iránt, a számok alapján, a rendelkezésre álló legegyszerűbb képletek segítségével. A szóban forgó számok összetett számok, két koordináta által képviselt mennyiségek (akárcsak egy sík pontjai), amelyeket valós és képzelt részeknek nevezünk. A 16. században találták ki őket matematikusok, hogy segítsenek megtalálni a polinomok gyökereit és az egyenletek megoldását, de széles és mély alkalmazásokat találtak a matematikában és a fizikai tudományokban. Hozzáadhatunk 2 komplex számot, megszorozhatjuk vagy oszthatjuk őket, és sok más dolgot is elvégezhetünk. Fatou és Julia tanulmányozták bizonyos dinamikus rendszerek tulajdonságait, ahol egy komplex szám változik egy egyszerű szabály szerint, amelyet többször ismételnek: itt nincs szükség bonyolult matematikára (így elfelejtheti az első képet …). Feltárták ezeknek a rendszereknek a gazdagságát, meghatározták a halmazokat, amelyeket ma Julia halmazainak neveznek, és tanulmányozták az önazonosságukat, ezért a fraktál aspektust… de a szó akkor még nem létezett, mert csak jóval később találta ki… Benoît Mandelbrot!

Az alapítók munkája után ez a domain feledésbe merült. Amikor a számítógépek megérkeztek, sok olyan matematikai jelenséget fedeztek fel, amelyek intenzív számítástechnikát igényeltek, beleértve a Julia és Fatou által megnyitott tartományt is. Így, amikor Benoît Mandelbrot az 1980 -as években úgy döntött, hogy IBM számítógépeket használ a holomorf dinamikához kapcsolódó matematikai halmaz képviseletéhez, nagyon vonzó és nagyon érdekes rajzot kapott (az előző rész első képe).

Mit jelent a Mandelbrot halmaz? Alapvetően a kép minden pontjához egy mögöttes dinamikus rendszer kapcsolódik. A pont koordinátái állítható paraméterként működnek. A különböző pontok Julia különböző halmazainak felelnek meg, és viselkedésüktől függően dönthetünk úgy, hogy a pontot meghatározott módon színezzük. A Mandelbrot halmaz olyan paraméterek halmaza, amelyekhez a rendszer rendelkezik egy bizonyos tulajdonsággal.

Hogyan kell kiszámítani a Mandelbrot és a Julia halmazokat?

Kicsit részletesebben kell foglalkoznunk ezekkel a halmazokkal. A Mandelbrot és Julia halmazokat egy egyszerű képlet, esetünkben z^n+c ismétlésével számítjuk ki. z egy komplex szám, amely a kijelző egy pontjának koordinátáit jelenti. egész kitevő, tehát z^n egyenlő z -vel, önmagával n -szer szorozva, és c állandó.

A Mandelbrot halmaz esetében a megjelenítési terület összes pontjára inicializáljuk a z értéket 0 -ra. A c konstanst egyenlőnek vesszük a figyelembe vett pont koordinátáival, és a képletet iteráljuk.

Itt a szabály: egy pont a halmaz része, ha ennek a képletnek az ismételt alkalmazása nem tér el (azaz nem vezet nagy számok felé történő számításokhoz). Matematikailag kimutatható, hogy ha a képlet eredménye meghaladja a 2 -t (modulusban, mivel komplex számokról beszélünk), akkor az iteráció eltérni fog. Tehát a szép színek gyors elérése érdekében leállítjuk az iterációt, ha az eredmény modulusa meghaladja a 2 -t, és a szín megfelel az adott iteráció számának. Ha az iterációk száma túl nagy lesz (tehát ha a pont része a Mandelbrot halmaznak), akkor egy adott küszöb után megállunk, és ehhez a ponthoz társítjuk a fekete színt.

A Julia halmaz hasonló módon kerül kiszámításra, de a számításokat nem 0 -n inicializálják, hanem a figyelembe vett pont koordinátáinak értékén, és a c állandót a felhasználó választja ki, és ugyanaz marad a teljes képre.

Ennyi, remélem világos … Ezek a magyarázatok segítenek jobban megérteni a többi használati utasítást.

2. lépés: Mire van szüksége?

Mire van szükséged?
Mire van szükséged?
Mire van szükséged?
Mire van szükséged?
Mire van szükséged?
Mire van szükséged?
Mire van szükséged?
Mire van szükséged?

Anyagszámla:

  • 1 ESP32 kártya
  • 1 TFT kijelző érintőképernyővel és ceruzával
  • 1 kenyérlap és vezetékek

Ez az. Teljes költség 10 USD alatt.

Az Espressif ESP32 egy kétmagos mikrokontroller, amely 240 MHz -en fut, így jó jelölt a gyors és összetett, ismétlődő számítástechnikában. WiFi és Bluetooth képességekkel rendelkezik, amelyeket ebben a projektben nem használok.

Az utasításkészlet 32 bit méretű. A 16 és 32 bites változókkal való számítás nagyon gyors, ami lehetővé teszi a pontos számításokat, ami alapvetően fontos a zoomoláshoz. Ebben az alkalmazásban egy 320 x 240 kijelző esetén a kép nagyjából 75 000 képpontból áll, amelyek mindegyikét egy iteratív folyamat segítségével számítják ki, amely akár 100 -szor is futhat. Ez 7 500 000 egységszámításhoz vezethet, amelyek mindegyike hatványozás, azaz több szorzás…

Tehát itt a számítási sebesség elengedhetetlen, de a pontosság alapvető. Minél többet zoomol, annál kisebb a készlet megjelenítendő része. Ez azt jelenti, hogy a kép 320 x 240 képpontja mindegyike egy számot jelent, amely nagyon közel van a szomszédaihoz. A zoom növekedésével ez a közelség növekszik.

De a fraktál képeknek megvan az a tulajdonsága, hogy a méretezés során változatlanok maradnak. Tehát mindenhol és minden skálázási tényezőnél apró részletek jelennek meg. A Mandelbrot -készlet fő alakja, amint az a fenti képen látható, valahol máshol található, sokkal kisebb verzióban, és akkor jelenik meg, ha elég közel zoomol (lásd a videót). De ha a két szomszédos pixel közötti koordináta -különbség túl kicsi ahhoz, hogy az ESP32 észrevegye viselkedési különbségeiket, a pontosság hiánya miatt a fraktálhatás nem jeleníthető meg …

A jó pontosság érdekében a kód úszókat használ, amelyeket az ESP32 32 bitben kódol. Ez akár 6 vagy 7 nagyítási szintet is lehetővé tesz. A kettős pontosság (64 bit) használata növelte volna ezt a nagyítási mélységet, lassabb számítások árán, így hosszabb időt 2 kép között.

A dupla pontosság érdekében csak változtassa meg a "float" összes előfordulását "dupla" értékre a kódban, és futtassa a kódot. Nemrég készítettem egy verziót egy nagyobb kijelzőhöz (HVGA 480 x 320 képpont): a 16 bites lebegés 3 másodpercet vesz igénybe a kép megjelenítéséhez, a duplázás pedig 10 és 20 másodperc között (3–6 -szor hosszabb), de több mint 15 nagyítási szintet támogat. A fejezet harmadik képe a Mandelbrot-készlet jobb szélén lévő 14-es nagyítási szintet mutatja.

A kijelző csatlakoztatása:

SPI kijelzőt használtam, és a paraméterek a User_Setup.h fájlban vannak beállítva (a TFT_eSPI könyvtár mappájában):

  • Illesztőprogram: vegye ki a megjegyzést a megfelelő illesztőprogramhoz a kijelzőhöz. Az enyém #define RPI_ILI9486_DRIVER volt
  • Pin számok: lépjen a fájl ESP32 szakaszába, és válassza a lehetőséget

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Chipválasztó vezérlőtű
    • #define TFT_DC 2 // Adatparancs vezérlő pin
    • #define TFT_RST 4 // Pin visszaállítása (csatlakozhat az RST pin -hez)
    • #define TOUCH_CS 22 // Chip Select pin (T_CS) érintőképernyő
  • Betűtípusok: nem szükséges megváltoztatni őket
  • Egyéb lehetőségek: Az alábbiakat választottam

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

A fájl összes többi sora ki van jegyezve.

Kalibrálja a kijelző érintési kapacitását

Ha a képernyő egy részének vagy gombjának kiválasztása nem pontos, vagy akár teljesen rossz, futtassa az érintéskalibrációs vázlatot a TFT_eSPI könyvtárból, és másolja be / illessze be a kódba az általa megadott tömböt (ügyeljen arra, hogy a kijelző tájolásához a megfelelő értéket használja, 1 vagy 3 tájképhez).

3. lépés: ESP32 program

ESP32 program
ESP32 program
ESP32 program
ESP32 program
ESP32 program
ESP32 program

A kód 320 x 240 TFT érintőképernyőn jelenik meg, és a TFT_eSPI könyvtárat használja. Számítja ki a Mandelbrot és Julia halmazokat több kitevő értékre, és lehetővé teszi az érdeklődési körök nagyítását, hogy lássa a fraktál aspektust (azaz ugyanazon struktúrák jelenlétét minden skálaváltozásnál).

A mellékelt kód egy 480 x 320 kijelzős verzió. Ebben a verzióban módosíthatja a kijelző méretét (szélessége és magassága pixelben). A TFT_eSPI könyvtár meghatározza a kapcsolatokat egy beállítási fájlban (mellékelve), amelyet a könyvtár könyvtárába kell helyezni.

A kód a kezelési utasítás megjelenítésével kezdődik (lásd a képet és a videót)

A képernyő nagy része a képek megjelenítésére van fenntartva, az érintőgombok a képernyő jobb oldalán találhatók:

  • R: "resetet" hajt végre, azaz e. maximális méretben jeleníti meg a képet,
  • U: A "visszavonás" lehetővé teszi, hogy visszatérjen az előző lépéshez (ha a nagyított régió nem érdekes, akkor a kép másik részét is nagyíthatja),
  • M vagy J: lehetővé teszi, hogy Mandelbrot készletéről Julia halmazára váltson, és fordítva.

Egyes gombok címkéi a kontextustól függően változnak: megjelenítik azt a funkciót, amely megnyomásakor végrehajtásra kerül. Tehát ha jelenleg a Mandelbrot -készletet jeleníti meg, az M/J gomb J -t jelenít meg, mivel ha megnyomja, akkor Julia halmaza jelenik meg (és fordítva).

Ugyanez vonatkozik a színpaletta megválasztására is. Kezdjük a zöld palettával. A gomb a következő palettát javasolja (a kék). A paletták: piros, zöld, kék, szürke, 1. paletta, 2. paletta és vissza pirosra. Az utolsó kettő sokszínű palettateszt, amely nagyobb kontrasztot biztosít, lehetővé téve néhány részlet jobb láthatóságát.

A számmal ellátott kulcs lehetővé teszi az n kitevő kiválasztását 2 és 7 közötti ciklusban (és vissza 2 -ig). Ugyanebben a szellemben 3 jelenik meg, ha jelenleg 2 éves…

Végül a Julia halmaz megjelenítésekor ki kell választani a konstans c értékét: a C gomb lehetővé teszi ezt, egy választónak köszönhetően (lásd a második képet). Ennek az állandónak az értéke megjelenik a készlettel együtt.

A képre kattintva nagyít a kiválasztott pont körül. Egy kis kör jelenik meg az érintett ponton, és egy téglalap kiemeli a készlet nagyított zónáját.

A 3. kép azt mutatja, hogy a számítási idő 0,8 és 1,2 másodperc között marad 320 x 240 képpont esetén, ami megkönnyíti a nagyítást és a megjelenítést. 480 x 320 pixel esetén eléri a 3 másodpercet, de további részleteket nyújt.

4. lépés: Néhány kép magyarázata…

Néhány kép elmagyarázva…
Néhány kép elmagyarázva…
Néhány kép elmagyarázva…
Néhány kép elmagyarázva…
Néhány kép elmagyarázva…
Néhány kép elmagyarázva…

A legnagyobb kép a jól ismert Mandelbrot készlet. A képen használt komplex számok -2,1 és +0,7 között vannak abszcisszában, és -1,2 és 1,2 közötti ordinátákban. Ha rákattint az első kép bal oldalára, akkor valószínűleg megkapja a másodikat, amely az eredeti készlet egy kisebb változatát jeleníti meg a készlet bal szélén. Mindkét kép esetében a kitevő ('n') egyenlő 2 -vel: ez az az érték, amelyet általában a Mandelbrot halmazok megjelenítésére használnak.

Ha ezt az értéket 3 -ra módosítja (csak kattintson a 3 -as kulcsra), akkor a harmadik képet kapja. Az egyik nyilvánvaló különbség a szimmetriatényező: n = 2 axiális szimmetriát ad (azaz a halmaz szimmetrikus a vízszintes középső tengelyhez képest), de n = 3 esetén a kép 120 ° -os forgatással (360 ° egyharmada, elforgatás) változatlanná válik szimmetriatényező 3). És megőrzi fraktál tulajdonságait, amelyeket a fekete alakzat széleinek nagyításával ellenőrizhet.

A 4. kép egy Julia -halmaz, amelyet 0,414 abszcisszában és 0,09 ordinátában számított együttható érték kiválasztása után kapunk. A piros paletta van kiválasztva, amint azt a jobb oldali zöld gomb is mutatja (zöld, a következő választandó szín). Az ötödik képen ugyanaz a Julia halmaz látható, amely az állandó magasabb képzelt része (0,358).

Remélem, élvezni fogja a játékot ezzel a programmal, és képes lesz szép fraktálképeket megjeleníteni. Ne habozzon, fedezze fel a Mandelbrot és Julia készleteket, és játsszon a palettákkal: ezek segítenek azonosítani néhány olyan részletet, amelyek nem láthatók az egyszerű monokrómokkal. Még olyan fraktál tájakat is felfedezhet, amelyeket még senki sem látott előtted…

_

Több fraktálképet szeretne felfedezni? Csak kattintson ide, vagy fedezze fel a fraktálművészetet vagy akár az ascii fraktált. Lehet, hogy ez az oktatási lehetőség arra késztet, hogy ilyen nagyszerű képeket készíts…

Matematikai Versennyel készült
Matematikai Versennyel készült
Matematikai Versennyel készült
Matematikai Versennyel készült

Második díj a Made with Math versenyen

Ajánlott: