Përmbajtje:

Mandelbrot dhe Julia vendos në ESP32: 4 hapa (me fotografi)
Mandelbrot dhe Julia vendos në ESP32: 4 hapa (me fotografi)

Video: Mandelbrot dhe Julia vendos në ESP32: 4 hapa (me fotografi)

Video: Mandelbrot dhe Julia vendos në ESP32: 4 hapa (me fotografi)
Video: The Fractal 2024, Korrik
Anonim
Image
Image
Mandelbrot dhe Julia vendos në ESP32
Mandelbrot dhe Julia vendos në ESP32
Mandelbrot dhe Julia vendos në ESP32
Mandelbrot dhe Julia vendos në ESP32

Ju me siguri i njihni fraktalet, më i famshmi prej të cilëve është grupi Mandelbrot.

Këtu është një program për të luajtur me ESP32. Zgjodha ESP32 sepse mendoj se do t'i bëjë llogaritjet më shpejt se një Arduino standard (frekuencë më e lartë e orës: 240 MHz): rreth një sekondë në një sekondë e gjysmë për llogaritjen dhe shfaqjen.

Kodi shfaqet në një ekran me prekje 480 x 320 TFT. Ai llogarit përcaktimet e Mandelbrot dhe Julia për disa vlera parametrash dhe ju lejon të zmadhoni zonat me interes për të parë aspektin fraktal (domethënë prania e strukturave të njëjta në çdo ndryshim të shkallës). Niveli i zmadhimit është i kufizuar për shkak të saktësisë së kufizuar të llogaritjeve, por një gjysmë duzine zmadhimi mund të bëhen para se imazhi të degradojë.

Bëhuni gati të eksploroni botën magjike të fraktaleve…

Hapi 1: Cilat janë Mandelbrot dhe Julia Sets?

Çfarë janë Mandelbrot dhe Julia Sets?
Çfarë janë Mandelbrot dhe Julia Sets?
Çfarë janë Mandelbrot dhe Julia Sets?
Çfarë janë Mandelbrot dhe Julia Sets?
Çfarë janë Mandelbrot dhe Julia Sets?
Çfarë janë Mandelbrot dhe Julia Sets?

Seti Mandelbrot mban emrin e Benoit Mandelbrot (1924-2010), një matematikan francez dhe amerikan i cili bëri punë pioniere në gjeometrinë fraktale, të inicuar në fund të shekullit të 19-të, ndër të tjera, nga Peano, Sierpinski dhe Julia.

Cilat janë objektet fraktale?

Parregullsitë e natyrës, të cilat mund të duken kaotike, të tilla si vija e bregut të detit, forma e reve, një peme, janë në fakt shprehja e një gjeometrie shumë komplekse në shkallë të ndryshueshme. Në këtë kontekst, nocioni i dimensionit thyesor zëvendëson atë të dimensionit të zakonshëm Euklidian (i cili është gjithmonë një numër i plotë)!

Një objekt fraktal është i tillë që çdo pjesë e tij është identike me tërësinë (kjo quhet vetë-ngjashmëri): struktura e tij është e pandryshueshme nga ndryshimi i shkallës.

Termi "fractal" është një neologjizëm i krijuar nga Benoît Mandelbrot në 1974 nga rrënja latine fractus, që do të thotë "i thyer", "i parregullt". Bothshtë një emër dhe një mbiemër. Shumë fenomene natyrore - të tilla si skica e bregdetit ose shfaqja e lakrës Romanesco (shiko foton) - kanë forma të përafërta fraktale.

Benoît Mandelbrot kishte një karrierë disi atipike: pasi dha mësim në Universitetin e Lille (Francë), ai mori një pozicion në IBM ku shpejt u bë anëtar i IBM, gjë që i dha një liri të madhe për studimet e tij shkencore. Në fillim të viteve 1980, pasi u largua nga IBM, ai u bë profesor në Harvard, por u vendos përgjithmonë në Yale.

Puna e tij në vitet 1960 dhe në fillim të viteve 1970 e bëri atë të botojë një artikull të famshëm të titulluar "Objekte fraktale", në të cilin ai tregoi se këto objekte, të konsideruara nga një pjesë e madhe e komunitetit matematikor si thjesht kuriozitete, gjendeshin kudo në natyrë. Ai dha shumë shembuj në një larmi fushash të tilla si fizika, hidrologjia, financat, meteorologjia, gjeografia, gjeologjia, metalurgjia….

Çfarë është vendosur Mandelbrot?

Për të filluar, le të themi se është një vizatim i bukur i krijuar nga një program. Dhe ky program është mjaft i thjeshtë. Ekzistojnë shumë vizatime të krijuara nga kompjuteri dhe shumë programe kompjuterike për t'i gjeneruar ato. Pra, çfarë ka kaq të veçantë për këtë? Së pari, grupi Mandelbrot është një nëngrup i planit, një koleksion pikash. Ai përmban zona por edhe kthesa të lëmuara, fije, pika nga të cilat burojnë degë të shumta dhe gjëra të tjera. E dyta: është vërtet magjepsëse dhe ka një histori shumë interesante.

Në fillim të shekullit të 20-të, matematikanët francezë Pierre Fatou dhe Gaston Julia zhvilluan një nën-fushë të matematikës të quajtur dinamikë holomorfike. Ata ishin të interesuar për funksione të veçanta, duke vepruar sipas numrave, duke përdorur disa nga formulat më të thjeshta në dispozicion. Numrat në fjalë janë numra kompleks, sasi të përfaqësuara nga dy koordinata (ashtu si pikat e një aeroplani) të quajtura pjesë reale dhe imagjinare. Ato u shpikën në shekullin e 16 -të nga matematikanët për të ndihmuar në gjetjen e rrënjëve të polinomeve dhe zgjidhjen e ekuacioneve, por kanë gjetur aplikime të gjera dhe të thella në matematikë dhe shkencat fizike. Ne mund të shtojmë 2 numra kompleksë, t’i shumëzojmë ose t’i ndajmë dhe të bëjmë shumë gjëra të tjera. Fatou dhe Julia studiuan vetitë e disa sistemeve dinamike ku një numër kompleks ndryshon sipas një rregulli të thjeshtë të përsëritur pa pushim: këtu nuk ka nevojë për matematikë të komplikuar (kështu, ju mund të harroni imazhin e parë …). Ata zbuluan pasurinë e këtyre sistemeve, përcaktuan grupet që tani quhen sete të Julia-s, dhe studiuan ngjashmërinë e tyre vetjake, pra aspektin fraktal … por fjala nuk ekzistonte në atë kohë sepse ishte shpikur shumë më vonë, nga… Benoît Mandelbrot!

Pas punës së themeluesve, kjo fushë ra në harresë. Kur kompjuterët mbërritën, ata ndihmuan në eksplorimin e shumë fenomeneve matematikore që kërkojnë llogaritjen intensive, përfshirë fushën e hapur nga Julia dhe Fatou. Kështu, kur Benoît Mandelbrot vendosi të përdorë kompjuterët IBM në vitet 1980 për të përfaqësuar një grup të caktuar matematikor të lidhur me dinamikën holomorfike, ai mori një vizatim shumë tërheqës dhe shumë intrigues (fotografia e parë e seksionit të mëparshëm).

Çfarë përfaqëson grupi Mandelbrot? Në thelb, ekziston një sistem dinamik themelor i lidhur me secilën pikë të imazhit. Koordinatat e pikës veprojnë si një parametër i rregullueshëm. Pika të ndryshme korrespondojnë me grupe të ndryshme të Julia dhe në varësi të sjelljes së tyre, ne mund të vendosim të ngjyrosim pikën në një mënyrë të veçantë. Seti Mandelbrot është grupi i parametrave për të cilët sistemi ka një veti të caktuar.

Si të llogaritni grupet Mandelbrot dhe Julia?

Duhet të futemi pak më shumë në detaje se si të llogaritim këto grupe. Kompletet Mandelbrot dhe Julia llogariten nga përsëritja e përsëritur e një formule të thjeshtë, në rastin tonë z^n+c. z është një numër kompleks që përfaqëson koordinatat e një pike në ekran. është një eksponent i plotë, kështu që z^n është i barabartë me z shumëzuar në vetvete n herë, dhe c është një konstante.

Për grupin Mandelbrot, për të gjitha pikat në zonën e shfaqjes, ne inicializojmë z në 0. Konstanta c merret e barabartë me vlerën e koordinatave të pikës së konsideruar dhe formula përsëritet.

Këtu është rregulli: një pikë është pjesë e grupit nëse aplikimi i përsëritur i kësaj formule nuk ndryshon (dmth. Nuk çon në llogaritjet drejt numrave të mëdhenj). Mund të tregohet matematikisht se nëse rezultati i formulës tejkalon 2 (në modul pasi po flasim për numra kompleks) përsëritja do të ndryshojë. Pra, për të marrë shpejt ngjyra të bukura, ndalojmë përsëritjen kur moduli i rezultatit tejkalon 2 dhe ngjyra korrespondon me numrin e atij përsëritjeje të veçantë. Nëse numri i përsëritjeve bëhet shumë i madh (kështu që nëse pika është pjesë e grupit Mandelbrot) ne ndalemi pas një pragu të caktuar dhe e lidhim ngjyrën e zezë me këtë pikë.

Seti Julia llogaritet në mënyrë të ngjashme, por llogaritjet nuk inicializohen në 0, por në vlerën e koordinatave të pikës së konsideruar dhe konstanta c zgjidhet nga përdoruesi dhe mbetet e njëjtë për të gjithë imazhin.

Kaq është, shpresoj se është e qartë … Këto shpjegime ndihmojnë për të kuptuar më mirë pjesën tjetër të udhëzimeve për përdorim.

Hapi 2: Çfarë ju nevojitet?

Cfare te nevojitet?
Cfare te nevojitet?
Cfare te nevojitet?
Cfare te nevojitet?
Cfare te nevojitet?
Cfare te nevojitet?
Cfare te nevojitet?
Cfare te nevojitet?

Faturë e materialit:

  • 1 tabelë ESP32
  • 1 ekran TFT me ekran me prekje dhe majë shkruese
  • 1 dërrasë buke dhe tela

Kjo eshte. Kostoja totale nën 10 dollarë.

ESP32 i Espressif është një mikrokontrollues me dy bërthama që funksionon në 240 MHz, gjë që e bën atë një kandidat të mirë për llogaritjet e shpejta dhe komplekse të përsëritura. Ka kapacitete WiFi dhe Bluetooth që nuk i përdor në këtë projekt.

Seti i udhëzimeve është 32 bit në madhësi. Llogaritja me variablat 16 dhe 32 bit është shumë e shpejtë e cila mundëson llogaritjet e sakta, gjë që është themelore për qëllimin e zmadhimit. Në këtë aplikacion, për një ekran 320 x 240, një imazh është bërë përafërsisht nga 75, 000 piksele, secila prej të cilave llogaritet duke përdorur një proces përsëritës i cili mund të zgjasë deri në 100 herë. Kjo mund të çojë në 7, 500, 000 llogaritje unitare, secila prej të cilave është një eksponencim, domethënë disa shumëzime…

Pra, shpejtësia e llogaritjes është thelbësore këtu, por saktësia është themelore. Sa më shumë të zmadhoni, aq më e vogël është madhësia e pjesës së grupit që do të shfaqet. Kjo do të thotë se secila prej 320 x 240 piksele të figurës përfaqëson një numër që është shumë afër fqinjëve të tij. Ndërsa zmadhimi rritet, kjo afërsi rritet.

Por imazhet fraktale kanë këtë pronë që ato mbeten të pandryshuara nga shkallëzimi. Kështu që detajet e vogla shfaqen kudo dhe për çdo faktor shkallëzimi. Forma kryesore e grupit Mandelbrot, siç shihet në ekranin në foton e mësipërme, mund të gjendet diku tjetër në një version shumë më të vogël dhe të shfaqet nëse e zmadhoni mjaftueshëm (shiko videon). Por nëse ndryshimi i koordinatave midis dy pikseleve fqinjë është shumë i vogël për të mundësuar që ESP32 të kapë ndryshimin e tyre në sjellje, për shkak të mungesës së saktësisë, efekti fraktal nuk mund të shfaqet …

Për të marrë një saktësi të mirë, kodi përdor noton, të cilët janë të koduar në 32 bit nga ESP32. Kjo mundëson deri në 6 ose 7 nivele zmadhimi. Përdorimi i saktësisë së dyfishtë (64 bit) do të kishte rritur këtë thellësi zmadhimi, me koston e llogaritjeve më të ngadalta, pra kohë më të gjata midis 2 imazheve.

Për ta bërë atë saktësi të dyfishtë, thjesht ndryshoni të gjitha rastet e "notoj" në "dyfish" në kod dhe ekzekutoni kodin. Kohët e fundit kam bërë një version për një ekran më të madh (HVGA 480 x 320 piksele): 16 bitëve të rrotullimit u duhen 3 sekonda për të shfaqur imazhin, dhe dyfishit marrin nga 10 deri në 20 sekonda (3 deri në 6 herë më shumë), por mbështesin më shumë se 15 nivele zmadhimi Me Imazhi i tretë në këtë kapitull tregon nivelin e zmadhimit 14 në pjesën më të djathtë të pjesës së Mandelbrot.

Si të lidhni ekranin:

Kam përdorur një ekran SPI, dhe parametrat janë vendosur në skedarin User_Setup.h (në dosjen e bibliotekës TFT_eSPI):

  • Shoferi: mos komentoni drejtuesin e duhur për ekranin tuaj. I imi ishte #define RPI_ILI9486_DRIVER
  • Numrat e kunjave: shkoni te pjesa ESP32 e skedarit dhe zgjidhni

    • #përcakto TFT_MISO 19
    • #përcakto TFT_MOSI 23
    • #përcakto TFT_SCLK 18
    • #define TFT_CS 15 // Kodi i kontrollit i zgjedhur me çip
    • #define TFT_DC 2 // Pina e kontrollit të Komandës së të Dhënave
    • #define TFT_RST 4 // Reset pin (mund të lidhet me pin RST)
    • #përcaktoni TOUCH_CS 22 // Pini i zgjedhur me çip (T_CS) i ekranit me prekje
  • Fontet: nuk ka nevojë t'i ndryshoni ato
  • Opsione të tjera: Zgjodha sa vijon

    • #përcaktoni SPI_FREQUENCY 20000000
    • #përcakto SPI_READ_FREQUENCY 20000000
    • #përcaktoni SPI_TOUCH_FREQUENCY 2500000

Të gjitha rreshtat e tjerë të skedarit komentohen.

Kalibroni kapacitetin e prekjes të ekranit

Nëse përzgjedhja e një pjese të ekranit ose një butoni nuk është e saktë, apo edhe krejtësisht e gabuar, ekzekutoni skicën e kalibrimit të prekjes nga biblioteka TFT_eSPI dhe kopjoni / ngjisni në kodin e grupit që ofron (sigurohuni që të përdorni vlerën e saktë për orientimin e ekranit, 1 ose 3 për peizazhin).

Hapi 3: Programi ESP32

Programi ESP32
Programi ESP32
Programi ESP32
Programi ESP32
Programi ESP32
Programi ESP32

Kodi shfaqet në një ekran me prekje 320 x 240 TFT dhe përdor bibliotekën TFT_eSPI. Ai llogarit përcaktimet e Mandelbrot dhe Julia për disa vlera eksponente dhe ju lejon të zmadhoni zonat me interes për të parë aspektin fraktal (domethënë prania e strukturave të njëjta në çdo ndryshim të shkallës).

Kodi i bashkangjitur është një version për ekranin 480 x 320. Në këtë version, ju mund të ndryshoni madhësinë (gjerësinë dhe lartësinë në pixel) të ekranit. Biblioteka TFT_eSPI përcakton lidhjet në një skedar konfigurimi (bashkangjitur) i cili duhet të vendoset në drejtorinë e bibliotekës.

Kodi fillon duke shfaqur udhëzimet e përdorimit (shiko figurën dhe videon)

Pjesa më e madhe e ekranit është e rezervuar për shfaqjen e imazheve, butonat e prekjes janë në dispozicion në anën e djathtë të ekranit:

  • R: kryen një "rivendosje", dmth. e shfaq imazhin në shkallën e tij maksimale,
  • U: "undo" ju lejon të ktheheni në hapin e mëparshëm (nëse zona e zmadhuar nuk është interesante, ju mund të zgjidhni një pjesë tjetër të imazhit për të zmadhuar),
  • M ose J: ju lejon të kaloni nga grupi i Mandelbrot në grupin e Julia dhe anasjelltas.

Etiketat e disa çelësave ndryshojnë sipas kontekstit: ato shfaqin funksionin që do të ekzekutohet nëse shtypet. Pra, nëse aktualisht shfaqni grupin Mandelbrot, çelësi M/J shfaq J pasi që nëse e shtypni atë do të shfaqni grupin e Julia (dhe anasjelltas).

E njëjta vlen edhe për zgjedhjen e gamës së ngjyrave. Ne fillojmë me gamën e gjelbër. Çelësi propozon paletën tjetër (atë blu). Paletat janë: e kuqe, jeshile, blu, gri, paleta 1, paleta 2 dhe përsëri në të kuqe. Dy të fundit janë teste paletash shumëngjyrëshe të cilat ofrojnë më shumë kontrast, duke lejuar që të shihen më mirë disa detaje.

Çelësi me një numër ju lejon të zgjidhni eksponentin n, në një lak nga 2 në 7 (dhe përsëri në 2). Në të njëjtën frymë, ai shfaq 3 nëse jeni aktualisht në 2…

Së fundi, kur shfaqni grupin Julia, është e nevojshme të zgjidhni vlerën e konstantës c: çelësi C ju lejon ta bëni këtë, falë një përzgjedhësi (shiko foton e dytë). Vlera e kësaj konstante shfaqet me setin.

Klikimi në imazh zmadhon rreth pikës së zgjedhur. Një rreth i vogël shfaqet në pikën e prekur dhe një drejtkëndësh thekson zonën e zmadhuar të grupit.

Fotografia e tretë tregon se koha e llogaritjes mbetet midis 0.8 dhe 1.2 sekonda për 320 x 240 piksele, gjë që e bën të rehatshme për të zmadhuar dhe shfaqur. Arrin 3 sekonda për 480 x 320 piksele, por jep më shumë detaje.

Hapi 4: Disa fotografi të shpjeguara…

Disa fotografi të shpjeguara…
Disa fotografi të shpjeguara…
Disa fotografi të shpjeguara…
Disa fotografi të shpjeguara…
Disa fotografi të shpjeguara…
Disa fotografi të shpjeguara…

Fotografia më e madhe është seti i mirënjohur Mandelbrot. Numrat kompleksë të përdorur në këtë imazh shkojnë nga -2.1 në +0.7 në abshisë, dhe -1.2 në 1.2 në ordinatë. Nëse zmadhoni pjesën e majtë të këtij imazhi të parë, ka shumë mundësi që më në fund të merrni të dytin, i cili shfaq një version më të vogël të grupit origjinal që gjendet në majën e majtë të grupit. Për të dyja këto imazhe, eksponenti ('n') është i barabartë me 2: kjo është vlera që zakonisht përdoret për të shfaqur grupet Mandelbrot.

Nëse e ndryshoni këtë vlerë në 3 (thjesht klikoni në çelësin duke thënë 3), ju merrni imazhin e tretë. Një ndryshim i dukshëm është faktori i simetrisë: n = 2 jep një simetri aksiale (p.sh. grupi është simetrik kundrejt boshtit mesatar horizontal), por me n = 3 imazhi bëhet i pandryshueshëm nga rrotullimi i 120 ° (një e treta e 360 °, rrotullimi faktori i simetrisë prej 3). Dhe ruan vetitë e tij fraktale, të cilat mund t'i verifikoni duke zmadhuar në skajet e formës së zezë.

Imazhi i 4 -të është një grup Julia i marrë pas zgjedhjes së një vlere koeficienti të barabartë me 0.414 në abcissa dhe 0.09 në ordinatë. Paleta e kuqe zgjidhet, siç mund të shihet nga çelësi i gjelbër në të djathtë (jeshile, duke qenë ngjyra tjetër që do të zgjidhet). Imazhi i pestë shfaq të njëjtin lloj të Julia, e cila është një pjesë më e lartë imagjinare e konstantes (0.358).

Shpresoj se do të kënaqeni duke luajtur me këtë program dhe do të jeni në gjendje të shfaqni fotografi të bukura fraktale. Mos hezitoni të eksploroni setet Mandelbrot dhe Julia dhe luani me paletat: ato ndihmojnë në identifikimin e disa detajeve që mund të mos jenë të dukshme me ato të thjeshta njëngjyrëshe. Ju madje mund të zbuloni disa peizazhe fraktale që askush nuk i ka parë kurrë para jush…

_

Dëshironi të zbuloni më shumë imazhe fraktale? Thjesht klikoni këtu ose eksploroni artin fraktal apo edhe ascii fractal. Ndoshta kjo e udhëzueshme do t'ju bëjë të dëshironi të krijoni imazhe kaq të mrekullueshme …

Bërë me konkurs matematikor
Bërë me konkurs matematikor
Bërë me konkurs matematikor
Bërë me konkurs matematikor

Çmimi i dytë në konkursin Made with Matematikë

Recommended: