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, Studeni
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.

Ovdje je program za igranje na ESP32. Odabrao sam ESP32 jer mislim da će izračunati brže od standardnog Arduina (veća frekvencija takta: 240 MHz): oko sekunde do sekunde i pol za izračun i prikaz.

Kôd se prikazuje na 480 x 320 TFT ekranu osjetljivom na dodir. Izračunava Mandelbrotov i Julijin skup 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 ljestvice). Razina zumiranja je ograničena zbog ograničene točnosti izrač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: Što su kompleti Mandelbrota i Julije?

Što su kompleti Mandelbrota i Julije?
Što su kompleti Mandelbrota i Julije?
Što su kompleti Mandelbrota i Julije?
Što su kompleti Mandelbrota i Julije?
Što su kompleti Mandelbrota i Julije?
Što su kompleti Mandelbrota i Julije?

Mandelbrotov skup nazvan je 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.

Što su fraktalni objekti?

Nepravilnosti prirode, koje se mogu činiti kaotičnim, 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 je struktura invarijantna promjenom razmjera.

Izraz "fraktal" neologizam je 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 romanesco kupusa (vidi sliku) - imaju približne fraktalne oblike.

Benoît Mandelbrot imao je pomalo netipičnu karijeru: nakon što je predavao na Sveučilištu u Lilleu (Francuska), zauzeo je mjesto u IBM -u, gdje je brzo postao IBM -ov stipendist, što mu je dalo veliku slobodu za znanstvene studije. Početkom osamdesetih, 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. Naveo je mnogo primjera u raznim područjima kao što su fizika, hidrologija, financije, meteorologija, geografija, geologija, metalurgija….

Što je Mandelbrotov set?

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

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

Nakon rada osnivača ova je domena pala u zaborav. Kad su računala stigla, oni su pomogli istražiti mnoge matematičke pojave koje zahtijevaju intenzivno računanje, uključujući domenu koju su otvorile Julia i Fatou. Tako je Benoît Mandelbrot 1980 -ih odlučio koristiti IBM računala 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).

Što predstavlja Mandelbrotov set? U osnovi, postoji dinamički sustav koji je u osnovi povezan sa svakom toč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 sustav ima određeno svojstvo.

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 točke na zaslonu. 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.

Ovdje vrijedi pravilo: točka je dio skupa ako se ponovljena primjena ove formule ne razilazi (tj. Ne dovodi do izrač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 razići. Kako 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 se proračuni 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 u boljem razumijevanju ostatka uputa za uporabu.

Korak 2: Što vam treba?

Što trebaš?
Što trebaš?
Što trebaš?
Što trebaš?
Što trebaš?
Što trebaš?
Što trebaš?
Što trebaš?

Račun za materijal:

  • 1 ploča ESP32
  • 1 TFT zaslon s zaslonom osjetljivim na dodir i olovkom
  • 1 ploča i žice

To je to. Ukupni trošak 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 vrlo je brzo što omogućuje točne proračune, što je temeljno za zumiranje. U ovoj aplikaciji, za zaslon veličine 320 x 240, slika se otprilike sastoji od 75 000 piksela, od kojih se svaki izračunava pomoću iteracijskog procesa koji se može izvoditi do 100 puta. To može dovesti do 7, 500 000 unitarnih izračuna, od kojih je svaki eksponencija, tj. Nekoliko množenja …

Dakle, brzina računanja ovdje je bitna, ali točnost je temeljna. Što više zumirate, to je manja veličina dijela skupa 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 zaslonu na gornjoj slici, može se pronaći negdje drugdje u mnogo manjoj verziji i prikazati ako zumirate dovoljno blizu (pogledajte na videu). No, ako je razlika koordinata između dva susjedna piksela premala da bi omogućila ESP32 -u da uhvati njihovu razliku u ponašanju, zbog nedostatka točnosti, fraktalni učinak se ne može pokazati …

Kako bi se postigla dobra preciznost, kod koristi float -ove, koje ESP32 kodira u 32 bita. To omogućuje do 6 ili 7 razina zumiranja. Korištenje dvostruke preciznosti (64 bita) povećalo bi ovu dubinu zumiranja, po cijenu sporijih izrač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 zaslon (HVGA 480 x 320 piksela): 16 bita s plutanjem trebaju 3 sekunde za prikaz slike, a dvostrukim između 10 i 20 sekundi (3 do 6 puta dulje), ali podržavaju više od 15 razina zumiranja. Treća slika u ovom poglavlju prikazuje razinu zumiranja 14 u krajnjem desnom dijelu Mandelbrotovog skupa.

Kako spojiti zaslon:

Koristio sam SPI zaslon, a parametri su postavljeni u datoteci User_Setup.h (u mapi knjižnice TFT_eSPI):

  • Upravljački program: uklonite komentar s ispravnog upravljačkog programa za vaš zaslon. 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 // Upravljački pin za naredbu 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 zaslona
  • Fontovi: nije ih potrebno mijenjati
  • Ostale mogućnosti: Odabrao sam sljedeće

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

Svi drugi retci datoteke su komentirani.

Kalibrirajte kapacitet zaslona osjetljiv na dodir

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 polja koji ona pruža (svakako koristite ispravnu vrijednost za orijentaciju prikaza, 1 ili 3 za krajolik).

Korak 3: Program ESP32

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

Kôd se prikazuje na 320 x 240 TFT zaslonu osjetljivom 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 ljestvice).

Priloženi kôd je verzija za zaslon veličine 480 x 320. U ovoj verziji možete promijeniti veličinu (širinu i visinu u pikselima) zaslona. Knjižnica TFT_eSPI definira veze u instalacijskoj datoteci (u privitku) koje se moraju staviti u direktorij knjižnice.

Kôd počinje prikazivanjem uputa za uporabu (pogledajte sliku i video)

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

  • R: izvodi "reset", tj. e. prikazuje sliku u najvećem mjerilu,
  • U: "poništavanje" omogućuje vam povratak na prethodni korak (ako zumirana regija nije zanimljiva, možete odabrati drugi dio slike za povećanje),
  • M ili J: omogućuje vam prebacivanje s Mandelbrotovog skupa 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 vrijedi i za odabir palete boja. Počinjemo sa zelenom paletom. Tipka predlaže sljedeću paletu (onu plavu). Palete su: crvena, zelena, plava, siva, paleta 1, paleta 2 i natrag do crvene. Posljednja dva su višebojna ispitivanja paleta koja pružaju veći kontrast, omogućujući bolji uvid u pojedinosti.

Tipka s brojem omogućuje vam odabir eksponenta n u petlji od 2 do 7 (i natrag 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 omogućuje vam da to učinite, zahvaljujući selektoru (vidi drugu sliku). Vrijednost ove konstante prikazuje se sa postavljenim.

Klikom na sliku zumirate odabranu točku. Mali krug prikazuje se na dodirnutoj točki, a pravokutnik 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 ugodnim 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 korišteni 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 vjerojatnost da ćete konačno dobiti drugu, koja prikazuje manju verziju izvornog seta koja se nalazi na krajnjem lijevom vrhu skupa. Za obje ove slike eksponent ('n') jednak je 2: to je vrijednost koja se obično koristi za prikaz Mandelbrotovih skupova.

Promijenite li ovu vrijednost na 3 (samo kliknite na tipku koja kaže 3), dobit ćete treću sliku. Jedna je očita razlika faktor simetrije: n = 2 daje aksijalnu simetriju (tj. Skup je simetričan prema srednjoj vodoravnoj 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 rubova crnog oblika.

Četvrta slika je Julijin skup dobiven nakon odabira vrijednosti koeficijenta jednakog 0,414 u apscisi i 0,09 u ordinati. Odabrana je crvena paleta, što se može vidjeti zelenom tipkom s desne strane (zelena, koja je sljedeća boja koju treba izabrati). 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 komplete Mandelbrot i Julia i igrati se paletama: one pomažu u identificiranju pojedinosti koje možda neće biti vidljive s jednostavnim jednobojnim. 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 s matematičkim natjecanjem
Napravljeno s matematičkim natjecanjem
Napravljeno s matematičkim natjecanjem
Napravljeno s matematičkim natjecanjem

Druga nagrada na natjecanju Made with Math

Preporučeni: