Sadržaj:

Mandelbrot i Julia postavljaju na ESP32: 4 koraka (sa slikama)
Mandelbrot i Julia postavljaju na ESP32: 4 koraka (sa slikama)

Video: Mandelbrot i Julia postavljaju na ESP32: 4 koraka (sa slikama)

Video: Mandelbrot i Julia postavljaju na ESP32: 4 koraka (sa slikama)
Video: № 133 Еженедельный обзор № 35 – Новые продукты для производителей 2024, Juli
Anonim
Image
Image
Mandelbrot i Julia postavljaju na ESP32
Mandelbrot i Julia postavljaju na ESP32
Mandelbrot i Julia postavljaju na ESP32
Mandelbrot i Julia postavljaju na ESP32

Sigurno znate fraktale, od kojih je najpoznatiji Mandelbrotov set.

Evo programa za igranje na ESP32. Odabrao sam ESP32 jer mislim da će on vršiti proračune brže od standardnog Arduina (veća taktna frekvencija: 240 MHz): oko sekunde do sekunde i pol za proračun i prikaz.

Kôd se prikazuje na 480 x 320 TFT ekranu osetljivom na dodir. Izračunava Mandelbrotove i Julijine skupove za nekoliko vrijednosti parametara i omogućuje vam zumiranje područja od interesa kako biste vidjeli fraktalni aspekt (tj. Prisutnost istih struktura pri svakoj promjeni skale). Nivo zuma je ograničen zbog ograničene tačnosti proračuna, ali može se napraviti pola tuceta zumiranja prije nego što se slika pogorša.

Pripremite se za istraživanje čarobnog svijeta fraktala …

Korak 1: Šta su Setovi Mandelbrota i Julije?

Šta su kompleti Mandelbrota i Julije?
Šta su kompleti Mandelbrota i Julije?
Šta su kompleti Mandelbrota i Julije?
Šta su kompleti Mandelbrota i Julije?
Šta su kompleti Mandelbrota i Julije?
Šta su kompleti Mandelbrota i Julije?

Mandelbrotov set dobio je ime po Benoitu Mandelbrotu (1924-2010), francuskom i američkom matematičaru koji se bavio pionirskim radom u fraktalnoj geometriji, koji su krajem 19. stoljeća pokrenuli, između ostalih, Peano, Sierpinski i Julia.

Šta su fraktalni objekti?

Nepravilnosti u prirodi, koje mogu djelovati kaotično, poput linije morske obale, oblika oblaka, stabla, zapravo su izraz vrlo složene geometrije na promjenjivom mjerilu. U tom kontekstu, pojam razlomljene dimenzije zamjenjuje uobičajenu euklidsku dimenziju (koja je uvijek cijeli broj)!

Fraktalni objekt je takav da je bilo koji njegov dio identičan cjelini (to se naziva samosličnost): njegova struktura je invarijantna promjenom razmjera.

Izraz "fraktal" je neologizam koji je stvorio Benoît Mandelbrot 1974. od latinskog korijena fractus, što znači "slomljen", "nepravilan". To je i imenica i pridjev. Mnogi prirodni fenomeni - poput obrisa obale ili izgleda romanskog kupusa (vidi sliku) - imaju približne fraktalne oblike.

Benoît Mandelbrot je imao pomalo atipičnu karijeru: nakon što je predavao na Univerzitetu u Lilleu (Francuska), zauzeo je mjesto u IBM -u, gdje je brzo postao IBM -ov stipendist, što mu je dalo veliku slobodu za naučne studije. Ranih 1980 -ih, nakon što je napustio IBM, postao je profesor na Harvardu, ali se trajno nastanio na Yaleu.

Njegovi radovi šezdesetih i ranih sedamdesetih doveli su ga do objavljivanja poznatog članka pod naslovom "Fraktalni objekti" u kojem je pokazao da se ti objekti, koje veliki dio matematičke zajednice smatra pukim zanimljivostima, nalaze posvuda u prirodi. Dao je mnogo primjera u raznim oblastima kao što su fizika, hidrologija, finansije, meteorologija, geografija, geologija, metalurgija….

Šta je Mandelbrotov set?

Za početak, recimo da je to lijep crtež koji je generirao program. Ovaj je program prilično jednostavan. Postoji mnogo računarski generiranih crteža i mnogo računalnog softvera za njihovu izradu. Pa šta je tako posebno u vezi ovoga? Prvo, Mandelbrotov skup je podskup plana, zbirka bodova. Sadrži područja, ali i glatke krivulje, niti, točke iz kojih proizlazi više grana i druge stvari. Drugo: zaista je fascinantno i ima vrlo zanimljivu istoriju.

Početkom 20. stoljeća francuski matematičari Pierre Fatou i Gaston Julia razvili su poddomen matematike koji se naziva holomorfna dinamika. Zanimale su ih određene funkcije, koje djeluju na brojeve, koristeći neke od najjednostavnijih dostupnih formula. Brojevi u pitanju su složeni brojevi, veličine predstavljene s dvije koordinate (baš kao i točke ravnine) koje se nazivaju stvarni i imaginarni dijelovi. Izumili su ih matematičari u 16. stoljeću kako bi pomogli u pronalaženju korijena polinoma i rješenju jednadžbi, ali su pronašli široku i duboku primjenu u matematici i fizičkim naukama. Možemo dodati 2 složena broja, pomnožiti ih ili podijeliti i učiniti mnoge druge stvari. Fatu i Julija su proučavali svojstva određenih dinamičkih sistema gdje kompleksni broj varira prema jednostavnom pravilu koje se ponavlja uvijek iznova: ovdje nema potrebe za kompliciranom matematikom (pa možete zaboraviti prvu sliku …). Otkrili su bogatstvo ovih sistema, definirali skupove koji se sada nazivaju Julijini skupovi i proučavali njihovu samosličnost, dakle fraktalni aspekt … ali riječ nije postojala u to vrijeme jer ju je izumio tek mnogo kasnije, Benoît Mandelbrot!

Nakon rada osnivača, ova domena je pala u zaborav. Kada su računari stigli, pomogli su u istraživanju mnogih matematičkih pojava koje su zahtijevale intenzivno računanje, uključujući i domenu koju su otvorili Julia i Fatou. Tako je Benoît Mandelbrot 1980 -ih odlučio koristiti IBM računare za predstavljanje određenog matematičkog skupa koji se odnosi na holomorfnu dinamiku, dobio je vrlo atraktivan i vrlo intrigantan crtež (prva slika prethodnog odjeljka).

Šta predstavlja Mandelbrotov set? U osnovi, postoji dinamički sistem koji je u osnovi povezan sa svakom tačkom slike. Koordinate točke djeluju kao podesivi parametar. Različite točke odgovaraju različitim skupovima Julije i ovisno o njihovom ponašanju, možemo odlučiti obojiti točku na određeni način. Mandelbrotov skup je skup parametara za koje sistem ima određena svojstva.

Kako izračunati skupove Mandelbrota i Julije?

Moramo ući u malo više detalja o tome kako izračunati ove skupove. Mandelbrotov i Julijin skup izračunavaju se ponovljenom iteracijom jednostavne formule, u našem slučaju z^n+c. z je složen broj koji predstavlja koordinate tačke na ekranu. je cijeli brojni eksponent, pa je z^n jednako z pomnoženo sa samim sobom n puta, a c je konstanta.

Za Mandelbrotov skup, za sve točke u području prikaza, inicijaliziramo z na 0. Konstanta c se uzima jednakom vrijednosti koordinata razmatrane točke, a formula se ponavlja.

Evo pravila: tačka je dio skupa ako se ponovljena primjena ove formule ne razilazi (tj. Ne dovodi do proračuna prema velikim brojevima). Matematički se može pokazati da ako rezultat formule prelazi 2 (po modulu budući da govorimo o složenim brojevima), iteracija će se razlikovati. Dakle, da bismo brzo dobili lijepe boje, zaustavljamo iteraciju kada modul rezultata prelazi 2, a boja odgovara broju te određene iteracije. Ako broj ponavljanja postane prevelik (pa ako je točka dio Mandelbrotovog skupa), mi se zaustavljamo nakon zadanog praga i pridružujemo crnu boju ovoj točki.

Skup Julia izračunava se na sličan način, ali proračuni se ne inicijaliziraju na 0, već na vrijednosti koordinata razmatrane točke, a konstanta c bira korisnik i ostaje ista za cijelu sliku.

To je to, nadam se da je jasno … Ova objašnjenja pomažu da se bolje razumije ostatak uputstava za upotrebu.

Korak 2: Šta vam treba?

Šta ti treba?
Šta ti treba?
Šta ti treba?
Šta ti treba?
Šta ti treba?
Šta ti treba?
Šta ti treba?
Šta ti treba?

Obračun materijala:

  • 1 ploča ESP32
  • 1 TFT ekran sa ekranom osetljivim na dodir i olovkom
  • 1 ploča i žice

To je to. Ukupni troškovi ispod 10 USD.

Espressifov ESP32 je dvojezgreni mikrokontroler koji radi na 240 MHz, što ga čini dobrim kandidatom za brzo i složeno ponavljajuće računanje. Ima WiFi i Bluetooth kapacitete koje ne koristim u ovom projektu.

Skup instrukcija je veličine 32 bita. Računanje sa 16 i 32 bitnim varijablama je vrlo brzo što omogućava precizne proračune, što je temeljno za zumiranje. U ovoj aplikaciji, za prikaz veličine 320 x 240, slika se otprilike sastoji od 75 000 piksela, od kojih se svaka izračunava ponavljajućim procesom koji se može izvoditi do 100 puta. To može dovesti do 7, 500 000 unitarnih izračuna, od kojih je svaki eksponencija, odnosno nekoliko množenja …

Dakle, brzina izračunavanja je ovdje bitna, ali tačnost je temeljna. Što više zumirate, to je manja veličina dijela seta za prikaz. To znači da svaki od 320 x 240 piksela slike predstavlja broj koji je vrlo blizu susjedima. Kako se zum povećava, ta se blizina povećava.

No, fraktalne slike imaju ovo svojstvo da ostaju nepromijenjene skaliranjem. Tako se mali detalji pojavljuju posvuda i za bilo koji faktor skaliranja. Glavni oblik Mandelbrotovog seta, kao što se vidi na ekranu na gornjoj slici, može se pronaći negdje drugdje u mnogo manjoj verziji i prikazati ako zumirate dovoljno blizu (pogledajte na videu). Ali ako je razlika koordinata između dva susjedna piksela premala da bi omogućila ESP32 da uhvati njihovu razliku u ponašanju, zbog nedostatka tačnosti, fraktalni efekat se ne može pokazati …

Da bi se postigla dobra preciznost, kod koristi float -ove, koje ESP32 kodira u 32 bita. Ovo omogućava do 6 ili 7 nivoa zumiranja. Korištenje dvostruke preciznosti (64 bita) povećalo bi dubinu zumiranja, po cijenu sporijih proračuna, pa time i duže vrijeme između 2 slike.

Da biste dobili dvostruku preciznost, samo promijenite sve pojave "float" u "double" u kodu i pokrenite kôd. Nedavno sam napravio verziju za veći ekran (HVGA 480 x 320 piksela): 16 bitovima plutaju potrebno je 3 sekunde za prikaz slike, a dvostrukim između 10 i 20 sekundi (3 do 6 puta duže), ali podržavaju više od 15 nivoa zumiranja. Treća slika u ovom poglavlju prikazuje nivo zumiranja 14 u krajnjem desnom dijelu Mandelbrotovog seta.

Kako spojiti ekran:

Koristio sam SPI ekran, a parametri su postavljeni u datoteci User_Setup.h (u fascikli biblioteke TFT_eSPI):

  • Upravljački program: uklonite komentar sa ispravnog upravljačkog programa za vaš ekran. Moj je bio #define RPI_ILI9486_DRIVER
  • PIN brojevi: idite na odjeljak datoteke ESP32 i odaberite

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Kontrolni pin za odabir čipa
    • #define TFT_DC 2 // Kontrolni pin komandi podataka
    • #define TFT_RST 4 // Resetiraj pin (može se spojiti na RST pin)
    • #define TOUCH_CS 22 // Igla za odabir čipa (T_CS) dodirnog ekrana
  • Fontovi: nema potrebe da ih mijenjate
  • Druge opcije: Odabrao sam sljedeće

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

Svi drugi redovi datoteke su komentirani.

Kalibrirajte kapacitet dodira ekrana

Ako odabir dijela zaslona ili gumba nije točan, ili čak potpuno pogrešan, pokrenite skicu kalibracije dodira iz biblioteke TFT_eSPI i kopirajte / zalijepite u kôd niza koji pruža (svakako upotrijebite ispravnu vrijednost za orijentaciju prikaza), 1 ili 3 za pejzaž).

Korak 3: ESP32 program

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

Kôd se prikazuje na 320 x 240 TFT ekranu osetljivom na dodir i koristi biblioteku TFT_eSPI. Izračunava Mandelbrotov i Julijin skup za nekoliko eksponentnih vrijednosti i omogućuje vam zumiranje područja od interesa kako biste vidjeli fraktalni aspekt (tj. Prisutnost istih struktura pri svakoj promjeni skale).

Priloženi kôd je verzija za 480 x 320 ekran. U ovoj verziji možete promijeniti veličinu (širinu i visinu u pikselima) ekrana. Biblioteka TFT_eSPI definira veze u instalacijskoj datoteci (u prilogu) koje se moraju staviti u direktorij biblioteke.

Kôd počinje prikazivanjem uputstva za upotrebu (pogledajte sliku i video zapis)

Većina ekrana je rezervirana za prikaz slika, dodirni gumbi dostupni su na desnoj strani ekrana:

  • R: vrši "reset", tj. e. prikazuje sliku u najvećoj mogućoj mjeri,
  • U: "poništavanje" vam omogućava da se vratite na prethodni korak (ako zumirana regija nije zanimljiva, možete odabrati drugi dio slike za povećanje),
  • M ili J: omogućava vam da se prebacite sa Mandelbrotovog na Julijin skup i obrnuto.

Oznake nekih tipki mijenjaju se ovisno o kontekstu: prikazuju funkciju koja će se izvršiti ako se pritisne. Dakle, ako trenutno prikazujete Mandelbrotov set, tipka M/J prikazuje J, jer ako ga pritisnete, prikazat će se Julijin skup (i obrnuto).

Isto se odnosi i na izbor palete boja. Počinjemo sa zelenom paletom. Tipka predlaže sljedeću paletu (plavu). Palete su: crvena, zelena, plava, siva, paleta 1, paleta 2 i nazad u crvenu. Posljednja dva su višebojna ispitivanja paleta koja pružaju veći kontrast, omogućavajući bolje vidjeti neke detalje.

Taster sa brojem omogućava vam da izaberete eksponent n, u petlji od 2 do 7 (i nazad do 2). U istom duhu, prikazuje 3 ako ste trenutno na 2…

Konačno, prilikom prikaza skupa Julia, potrebno je odabrati vrijednost konstante c: tipka C vam to omogućava, zahvaljujući selektoru (vidi drugu sliku). Vrijednost ove konstante prikazuje se sa postavljenim.

Klikom na sliku zumirate odabranu tačku. Mali krug se prikazuje na dodirnutoj tački, a pravougaonik označava zumiranu zonu skupa.

Treća slika pokazuje da vrijeme računanja ostaje između 0,8 i 1,2 sekunde za 320 x 240 piksela, što ga čini udobnim za zumiranje i prikaz. Dostiže 3 sekunde za 480 x 320 piksela, ali pruža više detalja.

Korak 4: Objašnjene neke slike …

Objašnjene neke slike…
Objašnjene neke slike…
Objašnjene neke slike…
Objašnjene neke slike…
Objašnjene neke slike…
Objašnjene neke slike…

Najveća slika je dobro poznati Mandelbrotov set. Kompleksni brojevi koji se koriste na ovoj slici kreću se od -2,1 do +0,7 u apscisi i -1,2 do 1,2 u ordinati. Ako zumirate lijevi dio ove prve slike, velika je vjerovatnoća da ćete konačno dobiti drugu, koja prikazuje manju verziju originalnog seta koji se nalazi na krajnjem lijevom vrhu seta. Za obje ove slike, eksponent ('n') je jednak 2: to je vrijednost koja se obično koristi za prikaz Mandelbrotovih skupova.

Ako promijenite ovu vrijednost na 3 (samo kliknite na tipku koja kaže 3), dobit ćete treću sliku. Jedna je očigledna razlika faktor simetrije: n = 2 daje aksijalnu simetriju (tj. Skup je simetričan prema srednjoj horizontalnoj osi), ali s n = 3 slika postaje invarijantna rotacijom za 120 ° (jedna trećina od 360 °, rotacija faktor simetrije 3). I zadržava svoja fraktalna svojstva, što možete provjeriti zumiranjem na rubovima crnog oblika.

Četvrta slika je Julijin skup dobijen odabirom vrijednosti koeficijenta jednake 0,414 u apscisi i 0,09 u ordinati. Odabrana je crvena paleta, što se može vidjeti pomoću zelenog ključa s desne strane (zelena, koja je sljedeća boja koja se bira). Peta slika prikazuje istu vrstu Julijinog skupa, koji je viši imaginarni dio konstante (0,358).

Nadam se da ćete uživati u igranju s ovim programom i da ćete moći prikazati lijepe fraktalne slike. Ne ustručavajte se istražiti setove Mandelbrota i Julije i igrati se paletama: one pomažu u identificiranju nekih detalja koji možda neće biti vidljivi kod jednostavnih jednobojnih. Možda ćete čak otkriti i neke fraktalne krajolike koje nitko prije vas nije vidio …

_

Želite li otkriti više fraktalnih slika? Samo kliknite ovdje ili istražite fraktalnu umjetnost ili čak ascii fraktal. Možda će vas ovo uputstvo natjerati da poželite stvoriti tako sjajne slike …

Napravljeno na takmičenju iz matematike
Napravljeno na takmičenju iz matematike
Napravljeno na takmičenju iz matematike
Napravljeno na takmičenju iz matematike

Druga nagrada na takmičenju Made with Math

Preporučuje se: