Cuprins:

Mandelbrot și Julia se instalează pe ESP32: 4 pași (cu imagini)
Mandelbrot și Julia se instalează pe ESP32: 4 pași (cu imagini)

Video: Mandelbrot și Julia se instalează pe ESP32: 4 pași (cu imagini)

Video: Mandelbrot și Julia se instalează pe ESP32: 4 pași (cu imagini)
Video: Mandelbrot Zoom Sequence 2024, Noiembrie
Anonim
Image
Image
Mandelbrot și Julia Setează pe ESP32
Mandelbrot și Julia Setează pe ESP32
Mandelbrot și Julia Setează pe ESP32
Mandelbrot și Julia Setează pe ESP32

Cu siguranță știți fractali, dintre care cel mai faimos este setul Mandelbrot.

Iată un program cu care să te joci pe ESP32. Am ales ESP32 pentru că cred că va face calculele mai repede decât un Arduino standard (frecvență de ceas mai mare: 240 MHz): aproximativ o secundă până la o secundă și jumătate pentru calcul și afișare.

Codul se afișează pe un ecran tactil TFT de 480 x 320. Calculează seturile Mandelbrot și Julia pentru mai multe valori ale parametrilor și vă permite să măriți zonele de interes pentru a vedea aspectul fractal (adică prezența acelorași structuri la fiecare schimbare de scară). Nivelul de zoom este limitat datorită preciziei limitate a calculelor, dar o jumătate de duzină de zoom-uri pot fi făcute înainte ca imaginea să se degradeze.

Pregătește-te să explorezi lumea magică a fractalilor …

Pasul 1: Ce sunt seturile Mandelbrot și Julia?

Ce sunt seturile Mandelbrot și Julia?
Ce sunt seturile Mandelbrot și Julia?
Ce sunt seturile Mandelbrot și Julia?
Ce sunt seturile Mandelbrot și Julia?
Ce sunt seturile Mandelbrot și Julia?
Ce sunt seturile Mandelbrot și Julia?

Setul Mandelbrot poartă numele lui Benoit Mandelbrot (1924-2010), un matematician francez și american care a făcut lucrări de pionnering în geometrie fractală, inițiat la sfârșitul secolului al XIX-lea de, printre alții, Peano, Sierpinski și Julia.

Ce sunt obiectele fractale?

Iregularitățile naturii, care pot părea haotice, cum ar fi linia coastei mării, forma norilor, un copac, sunt de fapt expresia unei geometrii foarte complexe la scară schimbătoare. În acest context, noțiunea de dimensiune fracțională o înlocuiește pe cea a dimensiunii euclidiene obișnuite (care este întotdeauna un număr întreg)!

Un obiect fractal este astfel încât orice porțiune a acestuia este identică cu întregul (aceasta se numește auto-similitudine): structura sa este invariantă prin schimbarea scalei.

Termenul „fractal” este un neologism creat de Benoît Mandelbrot în 1974 din rădăcina latină fractus, care înseamnă „rupt”, „neregulat”. Este atât un substantiv, cât și un adjectiv. Multe fenomene naturale - cum ar fi conturul litoralului sau apariția varzei romanesc (vezi imaginea) - au forme fractale aproximative.

Cea a lui Benoît Mandelbrot a avut o carieră oarecum atipică: după ce a predat la Universitatea din Lille (Franța), a ocupat o poziție la IBM, unde a devenit rapid Fellow IBM, ceea ce i-a dat o mare libertate pentru studiile sale științifice. La începutul anilor 1980, după ce a părăsit IBM, a devenit profesor la Harvard, dar s-a stabilit definitiv la Yale.

Munca sa din anii 1960 și începutul anilor 1970 l-a determinat să publice un celebru articol intitulat „Obiecte fractale” în care arăta că aceste obiecte, considerate de o mare parte a comunității matematice drept simple curiozități, se găseau peste tot în natură. El a dat o mulțime de exemple într-o mare varietate de domenii precum fizică, hidrologie, finanțe, meteorologie, geografie, geologie, metalurgie …

Ce este setul Mandelbrot?

Pentru început, să spunem că este un desen frumos generat de un program. Și acest program este destul de simplu. Există multe desene generate de computer și multe programe de calculator pentru a le genera. Deci, ce este atât de special la acesta? În primul rând, setul Mandelbrot este un subset al planului, o colecție de puncte. Conține zone, dar și curbe netede, filamente, puncte din care emană mai multe ramuri și alte lucruri. În al doilea rând: este cu adevărat fascinant și are o istorie foarte interesantă.

La începutul secolului al XX-lea, matematicienii francezi Pierre Fatou și Gaston Julia au dezvoltat un subdomeniu de matematică numit dinamică holomorfă. Ei erau interesați de anumite funcții, acționând asupra numerelor, folosind unele dintre cele mai simple formule disponibile. Numerele în cauză sunt numere complexe, mărimi reprezentate prin două coordonate (la fel ca punctele unui plan) numite părți reale și imaginare. Au fost inventate în secolul al XVI-lea de matematicieni pentru a ajuta la găsirea rădăcinilor polinoamelor și a soluției ecuațiilor, dar au găsit aplicații largi și profunde în matematică și științe fizice. Putem adăuga 2 numere complexe, le putem înmulți sau împărți și putem face multe alte lucruri. Fatou și Julia au studiat proprietățile anumitor sisteme dinamice în care un număr complex variază în funcție de o regulă simplă repetată de mai multe ori: nu este nevoie de matematică complicată aici (deci, puteți uita prima imagine …). Au dezvăluit bogăția acestor sisteme, au definit mulțimile numite acum mulțimi de Julia și au studiat similitudinea lor, deci aspectul fractal … dar cuvântul nu exista în acel moment, deoarece a fost inventat doar mult mai târziu, de … Benoît Mandelbrot!

După munca fondatorilor, acest domeniu a căzut în uitare. Când au sosit computerele, au ajutat la explorarea multor fenomene matematice care necesită calcul intensiv, inclusiv domeniul deschis de Julia și Fatou. Astfel, când Benoît Mandelbrot a decis să utilizeze computerele IBM în anii 1980 pentru a reprezenta un anumit set matematic legat de dinamica holomorfă, a obținut un desen foarte atractiv și foarte interesant (prima imagine a secțiunii anterioare).

Ce reprezintă setul Mandelbrot? Practic, există un sistem dinamic asociat fiecărui punct al imaginii. Coordonatele punctului acționează ca un parametru reglabil. Diferite puncte corespund diferitelor seturi de Julia și, în funcție de comportamentul lor, putem decide să colorăm punctul într-un mod special. Setul Mandelbrot este setul de parametri pentru care sistemul are o anumită proprietate.

Cum se calculează seturile Mandelbrot și Julia?

Trebuie să intrăm în mai multe detalii despre cum să calculăm aceste seturi. Seturile Mandelbrot și Julia sunt calculate prin iterația repetată a unei formule simple, în cazul nostru z ^ n + c. z este un număr complex care reprezintă coordonatele unui punct de pe afișaj. este un exponent întreg, deci z ^ n este egal cu z înmulțit cu el însuși de n ori, și c este o constantă.

Pentru setul Mandelbrot, pentru toate punctele din zona de afișare, inițializăm z la 0. Constanta c este luată egală cu valoarea coordonatelor punctului considerat și formula este iterată.

Iată regula: un punct face parte din set dacă aplicarea repetată a acestei formule nu diferă (adică nu duce la calcule pentru numere mari). Se poate demonstra matematic că, dacă rezultatul formulei depășește 2 (în modul, deoarece vorbim despre numere complexe), iterația va fi divergentă. Deci, pentru a obține rapid culori frumoase, oprim iterația atunci când modulul rezultatului depășește 2 și culoarea corespunde numărului acelei iterații. Dacă numărul de iterații devine prea mare (deci dacă punctul face parte din setul Mandelbrot) ne oprim după un prag dat și asociem culoarea neagră la acest punct.

Setul Julia este calculat într-un mod similar, dar calculele nu sunt inițializate la 0, ci la valoarea coordonatelor punctului considerat și constanta c este aleasă de utilizator și rămâne aceeași pentru întreaga imagine.

Gata, sper că este clar … Aceste explicații ajută la înțelegerea mai bună a restului instrucțiunilor de utilizare.

Pasul 2: De ce ai nevoie?

De ce ai nevoie?
De ce ai nevoie?
De ce ai nevoie?
De ce ai nevoie?
De ce ai nevoie?
De ce ai nevoie?
De ce ai nevoie?
De ce ai nevoie?

Lista materialelor:

  • 1 placa ESP32
  • 1 afișaj TFT cu ecran tactil și stylus
  • 1 panou și fire

Asta e. Cost total sub 10 USD.

ESP32 al Espressif este un microcontroler dual core care rulează la 240 MHz, ceea ce îl face un candidat bun pentru calcule repetitive rapide și complexe. Are capacități WiFi și Bluetooth pe care nu le folosesc în acest proiect.

Setul de instrucțiuni are o dimensiune de 32 de biți. Calculul cu variabile de 16 și 32 de biți este foarte rapid, ceea ce permite calcule precise, ceea ce este fundamental pentru zoom. În această aplicație, pentru un ecran de 320 x 240, o imagine este realizată aproximativ din 75 000 de pixeli, fiecare dintre aceștia fiind calculat utilizând un proces iterativ care poate rula de până la 100 de ori. Acest lucru poate duce la 7, 500, 000 de calcule unitare, fiecare dintre acestea fiind o exponențiere, adică mai multe multiplicări …

Așadar, viteza de calcul este esențială aici, dar precizia este fundamentală. Cu cât măriți mai mult, cu atât este mai mică dimensiunea porțiunii setului de afișat. Aceasta înseamnă că fiecare dintre cei 320 x 240 pixeli ai imaginii reprezintă un număr care este foarte aproape de vecinii săi. Pe măsură ce zoomul crește, această proximitate crește.

Dar imaginile fractale au această proprietate că rămân neschimbate prin scalare. Deci, detaliile mici apar peste tot și pentru orice factor de scalare. Forma principală a setului Mandelbrot, așa cum se vede pe afișajul din imaginea de mai sus, poate fi găsită în altă parte într-o versiune mult mai mică și poate fi afișată dacă faceți zoom suficient de aproape (a se vedea pe video). Dar dacă diferența de coordonate dintre doi pixeli vecini este prea mică pentru a permite ESP32 să capteze diferența lor de comportament, din cauza lipsei de precizie, efectul fractal nu poate fi afișat …

Pentru a obține o precizie bună, codul folosește flotări, care sunt codate în 32 de biți de ESP32. Aceasta permite până la 6 sau 7 niveluri de zoom. Folosirea unei precizii duble (64 de biți) ar fi mărit această adâncime de zoom, cu prețul unor calcule mai lente, deci timpi mai mari între 2 imagini.

Pentru a face o precizie dublă, trebuie doar să schimbați toate aparițiile „float” la „dublu” în cod și să executați codul. Recent am realizat o versiune pentru un ecran mai mare (HVGA 480 x 320 pixeli): 16 biți plutitori durează 3 secunde pentru a afișa imaginea, iar dublurile durează între 10 și 20 de secunde (de 3 până la 6 ori mai mult), dar acceptă mai mult de 15 niveluri de zoom. A treia imagine din acest capitol arată nivelul de zoom 14 în partea din dreapta a setului Mandelbrot.

Cum se conectează ecranul:

Am folosit un afișaj SPI, iar parametrii sunt setați în fișierul User_Setup.h (în folderul bibliotecii TFT_eSPI):

  • Driver: decomentați driverul corect pentru afișajul dvs. Al meu a fost #define RPI_ILI9486_DRIVER
  • Numere PIN: accesați secțiunea ESP32 a fișierului și alegeți

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Pinul de control pentru selectarea cipurilor
    • #define TFT_DC 2 // Pinul de control al comenzii de date
    • #define TFT_RST 4 // Resetați pinul (se poate conecta la pinul RST)
    • #define TOUCH_CS 22 // Pinul de selectare a cipului (T_CS) al ecranului tactil
  • Fonturi: nu este nevoie să le schimbați
  • Alte opțiuni: am selectat următoarele

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

Toate celelalte linii ale fișierului sunt comentate.

Calibrați capacitatea tactilă a afișajului

Dacă selectarea unei porțiuni de ecran sau a unui buton nu este corectă, sau chiar complet greșită, rulați schița de calibrare tactilă din biblioteca TFT_eSPI și copiați / lipiți în codul din matricea pe care o furnizează (asigurați-vă că utilizați valoarea corectă pentru orientarea afișajului, 1 sau 3 pentru peisaj).

Pasul 3: Programul ESP32

Programul ESP32
Programul ESP32
Programul ESP32
Programul ESP32
Programul ESP32
Programul ESP32

Codul se afișează pe un ecran tactil TFT de 320 x 240 și folosește biblioteca TFT_eSPI. Calculează seturile Mandelbrot și Julia pentru mai multe valori ale exponenților și vă permite să măriți zonele de interes pentru a vedea aspectul fractal (adică prezența acelorași structuri la fiecare schimbare de scară).

Codul atașat este o versiune pentru afișaj de 480 x 320. În această versiune, puteți modifica dimensiunea (lățimea și înălțimea în pixeli) a afișajului. Biblioteca TFT_eSPI definește conexiunile într-un fișier de configurare (atașat) care trebuie introdus în directorul bibliotecii.

Codul începe prin afișarea instrucțiunilor de utilizare (vezi imagine și video)

Majoritatea ecranului este rezervat pentru afișarea imaginilor, butoanele tactile sunt disponibile în partea dreaptă a ecranului:

  • R: efectuează o „resetare”, i. e. afișează imaginea la scara sa maximă,
  • U: „anulați” vă permite să reveniți la pasul anterior (dacă regiunea mărită nu este interesantă, puteți alege o altă parte a imaginii pentru a mări),
  • M sau J: vă permite să comutați de la setul lui Mandelbrot la setul lui Julia și invers.

Etichetele unor taste se modifică în funcție de context: afișează funcția care va fi executată dacă este apăsată. Deci, dacă afișați în prezent setul Mandelbrot, tasta M / J afișează J deoarece, dacă îl apăsați, veți afișa setul lui Julia (și invers).

Același lucru este valabil și pentru alegerea paletei de culori. Începem cu paleta verde. Tasta propune următoarea paletă (cea albastră). Paletele sunt: roșu, verde, albastru, gri, paleta 1, paleta 2 și înapoi la roșu. Ultimele două sunt teste de palete multicolore care oferă mai mult contrast, permițând să vedeți mai bine unele detalii.

Tasta cu un număr vă permite să alegeți exponentul n, într-o buclă de la 2 la 7 (și înapoi la 2). În același spirit, afișează 3 dacă sunteți în prezent la 2 …

În cele din urmă, la afișarea setului Julia, este necesar să alegeți valoarea constantei c: tasta C vă permite să faceți acest lucru, datorită unui selector (a se vedea a doua imagine). Valoarea acestei constante este afișată odată cu setul.

Dacă faceți clic pe imagine, măriți în jurul punctului selectat. Un cerc mic este afișat în punctul atins și un dreptunghi evidențiază zona mărită a setului.

Cea de-a treia imagine arată că timpii de calcul rămân între 0,8 și 1,2 secunde pentru 320 x 240 pixeli, ceea ce îl face confortabil pentru zoom și afișare. Acesta atinge 3 secunde pentru 480 x 320 pixeli, dar oferă mai multe detalii.

Pasul 4: Unele imagini explicate …

Câteva imagini explicate …
Câteva imagini explicate …
Câteva imagini explicate …
Câteva imagini explicate …
Câteva imagini explicate …
Câteva imagini explicate …

Cea mai mare imagine este binecunoscutul set Mandelbrot. Numerele complexe utilizate în această imagine variază de la -2,1 la +0,7 în abscisă și de la 1,2 până la 1,2 în ordonată. Dacă măriți partea foarte stângă a acestei prime imagini, este posibil să obțineți în cele din urmă cea de-a doua, care afișează o versiune mai mică a setului original găsit în vârful din stânga al setului. Pentru ambele imagini, exponentul ('n') este egal cu 2: aceasta este valoarea utilizată în mod normal pentru a afișa seturile Mandelbrot.

Dacă schimbați această valoare la 3 (faceți clic pe tasta care spune 3), veți obține a treia imagine. O diferență evidentă este factorul de simetrie: n = 2 oferă o simetrie axială (adică setul este simetric față de axa orizontală mediană), dar cu n = 3 imaginea devine invariantă prin rotație de 120 ° (o treime de 360 °, rotație factor de simetrie de 3). Și își păstrează proprietățile fractale, pe care le puteți verifica zoomând pe marginile formei negre.

A patra imagine este un set Julia obținut după selectarea unei valori de coeficient egale cu 0,414 în abscisă și 0,09 în ordonată. Se alege paleta roșie, așa cum se poate vedea prin tasta verde din dreapta (verde, fiind următoarea culoare care trebuie aleasă). Cea de-a cincea imagine afișează același tip de set Julia, care reprezintă o parte imaginară superioară a constantei (0,358).

Sper că vă veți bucura să vă jucați cu acest program și că veți putea afișa poze frumoase fractale. Nu ezitați să explorați seturile Mandelbrot și Julia și să vă jucați cu paletele: acestea ajută la identificarea unor detalii care ar putea să nu fie vizibile cu cele simple monocrome. S-ar putea să descoperiți chiar și unele peisaje fractale pe care nimeni nu le-a văzut vreodată înainte …

_

Doriți să descoperiți mai multe imagini fractale? Doar faceți clic aici sau explorați arta fractală sau chiar fractul ascii. Poate că acest instructiv vă va face să doriți să creați imagini atât de grozave …

Realizat cu concurs de matematică
Realizat cu concurs de matematică
Realizat cu concurs de matematică
Realizat cu concurs de matematică

Premiul II la Concursul Made with Math

Recomandat: