INHOUDSOPGAWE:

Mandelbrot en Julia stel op ESP32: 4 stappe (met foto's)
Mandelbrot en Julia stel op ESP32: 4 stappe (met foto's)

Video: Mandelbrot en Julia stel op ESP32: 4 stappe (met foto's)

Video: Mandelbrot en Julia stel op ESP32: 4 stappe (met foto's)
Video: Baroque fractals in Red & Yellow. Mandelbrot as Julia 2024, Julie
Anonim
Image
Image
Mandelbrot en Julia stel op ESP32
Mandelbrot en Julia stel op ESP32
Mandelbrot en Julia stel op ESP32
Mandelbrot en Julia stel op ESP32

U ken seker fraktale, waarvan die bekendste die Mandelbrot -stel is.

Hier is 'n program om mee te speel op ESP32. Ek het die ESP32 gekies omdat ek dink dat dit die berekeninge vinniger sal doen as 'n standaard Arduino (hoër klokfrekwensie: 240 MHz): ongeveer 'n sekonde tot 'n tweede en 'n half vir berekening en vertoning.

Die kode word op 'n 480 x 320 TFT -aanraakskerm vertoon. Dit bereken Mandelbrot en Julia -stelle vir verskeie parameterwaardes, en laat u toe om in te zoem op belangstellingsgebiede om die fraktale aspek te sien (dit wil sê die teenwoordigheid van dieselfde strukture by elke skaalverandering). Die zoomvlak is beperk weens die beperkte akkuraatheid van die berekeninge, maar 'n halfdosyn zoom kan gemaak word voordat die beeld agteruitgaan.

Maak gereed om die magiese wêreld van fraktale te verken …

Stap 1: Wat is Mandelbrot en Julia Sets?

Wat is Mandelbrot en Julia Sets?
Wat is Mandelbrot en Julia Sets?
Wat is Mandelbrot en Julia Sets?
Wat is Mandelbrot en Julia Sets?
Wat is Mandelbrot en Julia Sets?
Wat is Mandelbrot en Julia Sets?

Die Mandelbrot-stel is vernoem na Benoit Mandelbrot (1924-2010), 'n Franse en Amerikaanse wiskundige wat baanbrekerswerk in fraktale meetkunde gedoen het, wat aan die einde van die 19de eeu begin is deur onder andere Peano, Sierpinski en Julia.

Wat is fraktale voorwerpe?

Die onreëlmatighede van die natuur, wat chaoties kan lyk, soos die seestrand, die vorm van wolke, 'n boom, is in werklikheid die uitdrukking van 'n baie komplekse meetkunde op veranderende skaal. In hierdie konteks vervang die idee van breukdimensie die van die gewone Euclidiese dimensie (wat altyd 'n heelgetal is)!

'N Fraktale voorwerp is so dat enige gedeelte daarvan identies is aan die geheel (dit word self-ooreenkoms genoem): die struktuur daarvan is onveranderlik deur skaalverandering.

Die term "fraktaal" is 'n neologisme wat deur Benoît Mandelbrot in 1974 geskep is uit die Latynse wortelfraktus, wat "gebroke", "onreëlmatig" beteken. Dit is beide 'n selfstandige naamwoord en 'n byvoeglike naamwoord. Baie natuurverskynsels - soos die omtrek van die kuslyne of die voorkoms van Romanesco -kool (sien prentjie) - het benaderde fraktale vorms.

Benoît Mandelbrot het 'n ietwat atipiese loopbaan gehad: nadat hy aan die Universiteit van Lille (Frankryk) onderwys gegee het, neem hy 'n pos in by IBM, waar hy vinnig 'n IBM -genoot word, wat hom groot vryheid bied vir sy wetenskaplike studies. In die vroeë 1980's, nadat hy IBM verlaat het, word hy professor aan Harvard, maar vestig hom permanent in Yale.

Sy werk in die 1960's en vroeë 1970's het daartoe gelei dat hy 'n beroemde artikel getiteld "Fractal Objects" gepubliseer het waarin hy aantoon dat hierdie voorwerpe, wat deur 'n groot deel van die wiskundige gemeenskap as blote nuuskierighede beskou word, oral in die natuur voorkom. Hy het baie voorbeelde gegee op 'n wye verskeidenheid terreine soos fisika, hidrologie, finansies, meteorologie, geografie, geologie, metallurgie …

Wat is die Mandelbrot -stel?

Om mee te begin, laat ons sê dat dit 'n goeie tekening is wat deur 'n program gegenereer word. En hierdie program is redelik eenvoudig. Daar is baie rekenaargegenereerde tekeninge en baie rekenaarprogrammatuur om dit te genereer. So, wat is so spesiaal aan hierdie een? Eerstens is die Mandelbrot -stel 'n deelversameling van die plan, 'n versameling punte. Dit bevat gebiede, maar ook gladde krommes, filamente, punte waaruit verskeie takke voortspruit, en ander dinge. Tweedens: dit is regtig fassinerend en het 'n baie interessante geskiedenis.

Aan die begin van die 20ste eeu het die Franse wiskundiges Pierre Fatou en Gaston Julia 'n sub-domein van wiskunde ontwikkel, genaamd holomorfe dinamika. Hulle was geïnteresseerd in spesifieke funksies, gebaseer op getalle, met behulp van die eenvoudigste formules wat beskikbaar was. Die getalle ter sprake is komplekse getalle, hoeveelhede verteenwoordig deur twee koördinate (net soos die punte van 'n vliegtuig) wat werklike en denkbeeldige dele genoem word. Hulle is in die 16de eeu deur wiskundiges uitgevind om die wortels van polinome en die oplossing van vergelykings te vind, maar het wyd en diep toepassings in wiskunde en fisiese wetenskappe gevind. Ons kan 2 komplekse getalle byvoeg, vermenigvuldig of verdeel, en nog vele ander dinge doen: Fatou en Julia het die eienskappe van sekere dinamiese stelsels bestudeer waar 'n komplekse getal wissel volgens 'n eenvoudige reël wat herhaaldelik herhaal word: hier hoef u nie ingewikkelde wiskunde te hê nie (dus kan u die eerste prentjie vergeet …). Hulle onthul die rykdom van hierdie stelsels, definieer die stelle wat nou Julia se stelle genoem word, en bestudeer hul self-ooreenkoms, dus fraktale aspek … maar die woord het destyds nie bestaan nie, want dit is eers baie later uitgevind deur … Benoît Mandelbrot!

Na die werk van die stigters verval hierdie domein in die vergetelheid. Toe die rekenaars aankom, het hulle gehelp om baie wiskundige verskynsels te ondersoek wat intensiewe rekenaarwerk vereis, insluitend die domein wat deur Julia en Fatou geopen is, en toe Benoît Mandelbrot besluit het om IBM -rekenaars in die 1980's te gebruik om 'n sekere wiskundige stel voor te stel wat verband hou met holomorfe dinamika, het hy 'n baie aantreklike en baie interessante tekening verkry (eerste prentjie van die vorige afdeling).

Wat verteenwoordig die Mandelbrot -stel? Basies is daar 'n onderliggende dinamiese stelsel wat verband hou met elke punt van die beeld. Die koördinate van die punt dien as 'n verstelbare parameter. Verskillende punte stem ooreen met verskillende stelle Julia, en afhangende van hul gedrag, kan ons besluit om die punt op 'n spesifieke manier in te kleur. Die Mandelbrot -stel is die stel parameters waarvoor die stelsel 'n sekere eienskap het.

Hoe om Mandelbrot en Julia -stelle te bereken?

Ons moet 'n bietjie meer in detail gaan oor hoe om hierdie stelle te bereken. Mandelbrot en Julia stelle word bereken deur die herhaalde herhaling van 'n eenvoudige formule, in ons geval z^n+c. z is 'n komplekse getal wat die koördinate van 'n punt op die skerm voorstel. is 'n heelgetal eksponent, dus is z^n gelyk aan z vermenigvuldig met homself n keer, en c is 'n konstante.

Vir die Mandelbrot -stel, vir alle punte in die vertoonarea, initialiseer ons z tot 0. Die konstante c word gelyk aan die waarde van die koördinate van die oorweegde punt en die formule word herhaal.

Hier is die reël: 'n punt is deel van die stel as die herhaalde toepassing van hierdie formule nie afwyk nie (dit wil sê, dit lei nie tot berekeninge na groot getalle nie). Dit kan wiskundig aangetoon word dat die iterasie sal afwyk as die resultaat van die formule 2 oorskry (in modulus aangesien ons oor komplekse getalle praat). Om vinnig mooi kleure te verkry, stop ons die iterasie wanneer die modulus van die resultaat 2 oorskry en die kleur ooreenstem met die aantal van die spesifieke iterasie. As die aantal iterasies te groot word (dus as die punt deel is van die Mandelbrot -stel) stop ons na 'n gegewe drumpel en koppel die swart kleur aan hierdie punt.

Die Julia -stel word op 'n soortgelyke manier bereken, maar die berekeninge word nie met 0 geïnitialiseer nie, maar teen die waarde van die koördinate van die oorweegde punt en die konstante c word deur die gebruiker gekies en bly dieselfde vir die hele beeld.

Dit is dit, ek hoop dat dit duidelik is … Hierdie verduidelikings help om die res van die gebruiksaanwysings beter te verstaan.

Stap 2: Wat het u nodig?

Wat het jy nodig?
Wat het jy nodig?
Wat het jy nodig?
Wat het jy nodig?
Wat het jy nodig?
Wat het jy nodig?
Wat het jy nodig?
Wat het jy nodig?

Handves van materiaal:

  • 1 ESP32 -bord
  • 1 TFT -skerm met raakskerm en stylus
  • 1 broodbord en drade

Dis dit. Totale koste onder 10 dollar.

Espressif se ESP32 is 'n dubbelkern -mikrobeheerder wat op 240 MHz werk, wat dit 'n goeie kandidaat maak vir vinnige en komplekse herhalende rekenaars. Dit het WiFi- en Bluetooth -vermoëns wat ek nie in hierdie projek gebruik nie.

Die instruksiestel is 32 bisse groot. Die berekening met 16 en 32 bis veranderlikes is baie vinnig, wat akkurate berekeninge moontlik maak, wat noodsaaklik is vir die inzoomen. In hierdie toepassing, vir 'n 320 x 240 -skerm, word ongeveer 'n beeld van 75 000 pixels gemaak, wat elkeen bereken word met behulp van 'n herhalende proses wat tot 100 keer kan duur. Dit kan lei tot 7, 500, 000 eenheidsberekeninge, wat elkeen 'n eksponentiasie is, dit wil sê verskeie vermenigvuldigings …

Berekeningsnelheid is dus noodsaaklik hier, maar akkuraatheid is fundamenteel. Hoe meer u inzoom, hoe kleiner is die grootte van die gedeelte van die stel wat vertoon moet word. Dit beteken dat elkeen van die 320 x 240 pixels van die prent 'n getal verteenwoordig wat baie naby die bure is. Namate die zoom toeneem, neem hierdie nabyheid toe.

Maar fraktale beelde het die eienskap dat dit onveranderd bly deur te skaal. Klein besonderhede verskyn dus oral en vir enige skaalfaktor. Die hoofvorm van die Mandelbrot -stel, soos gesien op die skerm op die foto hierbo, kan êrens anders in 'n baie kleiner weergawe gevind word en vertoon word as u naby genoeg inzoom (sien op die video). Maar as die koördinaatverskil tussen twee buurpiksels te klein is om die ESP32 in staat te stel om hul gedragsverskil te begryp, weens 'n gebrek aan akkuraatheid, kan die fraktale effek nie getoon word nie …

Om goeie presisie te kry, gebruik die kode vlotte, wat in 32 bisse deur die ESP32 gekodeer is. Dit maak tot 6 of 7 inzoomvlakke moontlik. Deur dubbele presisie (64 bisse) te gebruik, sou hierdie inzoomdiepte vergroot word ten koste van stadiger berekeninge, dus langer tye tussen 2 beelde.

Om dit dubbele presisie te maak, verander net alle gevalle van "float" na "double" in die kode en voer die kode uit. Ek het onlangs 'n weergawe vir 'n groter skerm (HVGA 480 x 320 pixels) gemaak: 16 bits floats neem 3 sekondes om die beeld te vertoon, en dubbels neem tussen 10 en 20 sekondes (3 tot 6 keer langer), maar ondersteun meer as 15 zoomvlakke. Die derde prent in hierdie hoofstuk toon die zoomvlak 14 in die regterkantste deel van die Mandelbrot-stel.

Hoe om die skerm aan te sluit:

Ek het 'n SPI -skerm gebruik, en die parameters word in die User_Setup.h -lêer (in die TFT_eSPI -biblioteekmap) gestel:

  • Bestuurder: los die korrekte bestuurder vir u skerm op. Myne was #define RPI_ILI9486_DRIVER
  • Speldnommers: gaan na die ESP32 -afdeling van die lêer en kies

    • #definieer TFT_MISO 19
    • #definieer TFT_MOSI 23
    • #definieer TFT_SCLK 18
    • #define TFT_CS 15 // Chip select control pin
    • #define TFT_DC 2 // Data Command -beheerpen
    • #define TFT_RST 4 // Herstel pen (kan met RST -pen verbind word)
    • #define TOUCH_CS 22 // Chip select pin (T_CS) of touch screen
  • Lettertipes: dit is nie nodig om dit te verander nie
  • Ander opsies: Ek het die volgende gekies

    • #definieer SPI_FREQUENCY 20000000
    • #definieer SPI_READ_FREQUENCY 20000000
    • #definieer SPI_TOUCH_FREQUENCY 2500000

Op al die ander reëls van die lêer word kommentaar gelewer.

Kalibreer die aanraakvermoë van die skerm

As die keuse van 'n skermgedeelte of 'n knoppie nie akkuraat is nie, of selfs heeltemal verkeerd is, voer die aanraakkalibrasie -skets uit die TFT_eSPI -biblioteek uit en plak / plak dit in die kode wat die skikking bevat (gebruik die korrekte waarde vir vertoonoriëntasie, 1 of 3 vir landskap).

Stap 3: ESP32 -program

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

Die kode word op 'n 320 x 240 TFT -aanraakskerm vertoon en gebruik die TFT_eSPI -biblioteek. Dit bereken Mandelbrot en Julia -stelle vir verskeie eksponentwaardes, en laat u toe om in te zoem op belangstellingsgebiede om die fraktale aspek te sien (dit wil sê die teenwoordigheid van dieselfde strukture by elke skaalverandering).

Die aangehegte kode is 'n weergawe vir 480 x 320 skerms. In hierdie weergawe kan u die grootte (breedte en hoogte in pixels) van die skerm verander. Die TFT_eSPI -biblioteek definieer die verbindings in 'n opstellêer (aangeheg) wat in die biblioteek se gids geplaas moet word.

Die kode begin deur die gebruiksaanwysings te vertoon (sien prentjie en video)

Die grootste deel van die skerm is gereserveer vir die vertoon van beelde, aanraakknoppies is aan die regterkant van die skerm beskikbaar:

  • R: voer 'n "reset" uit, d.w.s. e. vertoon die prent op sy maksimum skaal,
  • U: met "ongedaan" kan u teruggaan na die vorige stap (as die ingezoomde gebied nie interessant is nie, kan u 'n ander deel van die prent kies om in te zoem),
  • M of J: laat jou toe om oor te skakel van Mandelbrot se stel na Julia se stel en omgekeerd.

Die etikette van sommige sleutels verander volgens die konteks: dit vertoon die funksie wat uitgevoer sal word as dit ingedruk word. As u dus die Mandelbrot -stel vertoon, vertoon die M/J -sleutel J, want as u daarop druk, sal Julia se stel verskyn (en omgekeerd).

Dieselfde geld vir die keuse van die kleurpalet. Ons begin met die groen palet. Die sleutel stel die volgende palet voor (die blou). Die palette is: rooi, groen, blou, grys, palet 1, palet 2 en terug na rooi. Die laaste twee is veelkleurige palettoetse wat meer kontras bied, sodat u 'n paar besonderhede beter kan sien.

Met die sleutel met 'n getal kan u die eksponent n kies, in 'n lus van 2 tot 7 (en terug na 2). In dieselfde gees vertoon dit 3 as u tans op 2 …

Ten slotte, as u die Julia -stel vertoon, is dit nodig om die waarde van die konstante c te kies: met die C -toets kan u dit doen, danksy 'n selector (sien tweede prent). Die waarde van hierdie konstante word met die stel vertoon.

Deur op die prent te klik, word inzoom rondom die geselekteerde punt. 'N Klein sirkel word op die raakpunt vertoon en 'n reghoek beklemtoon die ingezoomde sone van die stel.

Die derde prentjie toon dat die rekenaartye tussen 320 en 240 pixels tussen 0,8 en 1,2 sekondes bly, wat dit gemaklik maak om in te zoem en te vertoon. Dit bereik 3 sekondes vir 480 x 320 pixels, maar bied meer besonderhede.

Stap 4: 'n Paar prente verduidelik …

Sommige foto's verduidelik …
Sommige foto's verduidelik …
Sommige foto's verduidelik …
Sommige foto's verduidelik …
Sommige foto's verduidelik …
Sommige foto's verduidelik …

Die grootste prentjie is die bekende Mandelbrot -stel. Die komplekse getalle wat in hierdie prent gebruik word, wissel van -2.1 tot +0.7 in abscissa en -1.2 tot 1.2 in ordinaat. As u op die heel linker gedeelte van hierdie eerste prent zoom, is die kans groot dat u uiteindelik die tweede een kry, wat 'n kleiner weergawe van die oorspronklike stel in die punt van die linkerkant van die stel vertoon. Vir beide hierdie beelde is die eksponent ('n ') gelyk aan 2: dit is die waarde wat normaalweg gebruik word om Mandelbrot -stelle te vertoon.

As u hierdie waarde na 3 verander (klik net op die sleutelwoord 3), kry u die derde prentjie. Een duidelike verskil is die simmetriefaktor: n = 2 gee 'n aksiale simmetrie (dws die stel is simmetries teenoor die mediaan horisontale as), maar met n = 3 word die beeld onveranderlik deur rotasie van 120 ° (een derde van 360 °, rotasie simmetrie faktor van 3). En dit behou sy fraktale eienskappe, wat u kan verifieer deur op die rande van die swart vorm in te zoem.

Die vierde beeld is 'n Julia -stel wat verkry is nadat 'n koëffisiëntwaarde gelyk is aan 0.414 in abscissa en 0.09 in ordinaat. Die rooi palet word gekies, soos gesien kan word deur die groen sleutel aan die regterkant (groen, die volgende kleur wat gekies moet word). Die vyfde beeld vertoon dieselfde soort Julia -stel, wat 'n hoër denkbeeldige deel van die konstante is (0,358).

Ek hoop dat u dit geniet om met hierdie program te speel en dat u mooi fraktale foto's kan vertoon. Moenie huiwer om die stelle Mandelbrot en Julia te verken en met die palette te speel nie: dit help om 'n paar besonderhede te identifiseer wat moontlik nie sigbaar is met die eenvoudige monochrome nie. U ontdek selfs 'n paar fraktale landskappe wat niemand nog voor u gesien het nie …

_

Wil u meer fraktale beelde ontdek? Klik net hier of verken fraktale kuns of selfs ascii fraktaal. Miskien sal hierdie instruksies jou laat wonder om sulke wonderlike beelde te skep …

Gemaak met 'n wiskundige wedstryd
Gemaak met 'n wiskundige wedstryd
Gemaak met 'n wiskundige wedstryd
Gemaak met 'n wiskundige wedstryd

Tweede prys in die Made with Math wedstryd

Aanbeveel: