Tartalomjegyzék:
- 1. lépés: Mik azok a Mandelbrot és Julia készletek?
- 2. lépés: Mire van szüksége?
- 3. lépés: ESP32 program
- 4. lépés: Néhány kép magyarázata…
Videó: Mandelbrot és Julia az ESP32 -n: 4 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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?
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?
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
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…
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…
Második díj a Made with Math versenyen
Ajánlott:
Professzionális meteorológiai állomás ESP8266 és ESP32 DIY használatával: 9 lépés (képekkel)
Professzionális időjárás -állomás az ESP8266 és az ESP32 barkácsolás segítségével: A LineaMeteoStazione egy komplett időjárás -állomás, amely összekapcsolható a Sensirion professzionális érzékelőivel, valamint néhány Davis -műszeregységgel (esőmérő, szélmérő)
ESP32 TTGO WiFi jelerősség: 8 lépés (képekkel)
ESP32 TTGO WiFi jelerősség: Ebben az oktatóanyagban megtanuljuk, hogyan kell megjeleníteni a WiFi hálózati jelerősséget az ESP32 TTGO kártya használatával. Nézze meg a videót
Útmutató: A Raspberry PI 4 fej nélküli (VNC) telepítése Rpi-képalkotóval és képekkel: 7 lépés (képekkel)
Útmutató: A Raspberry PI 4 fej nélküli (VNC) telepítése Rpi-képalkotóval és képekkel: Ezt a Rapsberry PI-t tervezem használni egy csomó szórakoztató projektben a blogomban. Nyugodtan nézd meg. Vissza akartam kezdeni a Raspberry PI használatát, de nem volt billentyűzetem vagy egér az új helyen. Rég volt, hogy beállítottam egy málnát
Első lépések az ESP32 -vel - ESP32 táblák telepítése Arduino IDE - -be ESP32 villogó kód: 3 lépés
Első lépések az ESP32 -vel | ESP32 táblák telepítése Arduino IDE | -be ESP32 villogó kód: Ebben az utasításban látni fogjuk, hogyan kell elkezdeni az esp32 -vel való munkát, és hogyan kell telepíteni az esp32 táblákat az Arduino IDE -be, és beprogramozzuk az esp 32 -et, hogy futtassa a villogó kódot az arduino ide használatával
A számítógép szétszerelése egyszerű lépésekkel és képekkel: 13 lépés (képekkel)
A számítógép szétszerelése egyszerű lépésekkel és képekkel: Ez az utasítás a számítógép szétszereléséről szól. A legtöbb alapvető alkatrész moduláris és könnyen eltávolítható. Fontos azonban, hogy szervezett legyen ezzel kapcsolatban. Ez segít elkerülni az alkatrészek elvesztését, és az újra összerakást is