Satura rādītājs:

Mandelbrots un Džūlija nosaka ESP32: 4 soļi (ar attēliem)
Mandelbrots un Džūlija nosaka ESP32: 4 soļi (ar attēliem)

Video: Mandelbrots un Džūlija nosaka ESP32: 4 soļi (ar attēliem)

Video: Mandelbrots un Džūlija nosaka ESP32: 4 soļi (ar attēliem)
Video: Рик Уоррен про целеустремленную жизнь 2024, Jūlijs
Anonim
Image
Image
Mandelbrots un Džūlija nosaka ESP32
Mandelbrots un Džūlija nosaka ESP32
Mandelbrots un Džūlija nosaka ESP32
Mandelbrots un Džūlija nosaka ESP32

Jūs noteikti zināt fraktāļus, no kuriem slavenākais ir Mandelbrota komplekts.

Šeit ir programma, ar kuru spēlēt ESP32. Es izvēlējos ESP32, jo, manuprāt, tas veiks aprēķinus ātrāk nekā standarta Arduino (augstāka pulksteņa frekvence: 240 MHz): aptuveni sekunde līdz pusotra aprēķināšanai un attēlošanai.

Kods tiek parādīts 480 x 320 TFT skārienekrānā. Tas aprēķina Mandelbrota un Džūlijas kopas vairākām parametru vērtībām un ļauj tuvināt interesējošās jomas, lai redzētu fraktāļu aspektu (t.i., vienas un tās pašas struktūras klātbūtne katrā skalas maiņā). Tālummaiņas līmenis ir ierobežots, jo ir ierobežota aprēķinu precizitāte, bet pirms attēla pasliktināšanās var veikt pusduci tālummaiņu.

Gatavojieties izpētīt fraktāļu burvju pasauli…

1. darbība: kas ir Mandelbrota un Džūlijas komplekti?

Kas ir Mandelbrota un Džūlijas komplekti?
Kas ir Mandelbrota un Džūlijas komplekti?
Kas ir Mandelbrota un Džūlijas komplekti?
Kas ir Mandelbrota un Džūlijas komplekti?
Kas ir Mandelbrota un Džūlijas komplekti?
Kas ir Mandelbrota un Džūlijas komplekti?

Mandelbrota komplekts ir nosaukts franču un amerikāņu matemātiķa Benoita Mandelbrota (1924-2010) vārdā, kurš veica pionieru darbu fraktāļu ģeometrijā, ko 19. gadsimta beigās uzsāka cita starpā Peano, Sierpinski un Julia.

Kas ir fraktāļu objekti?

Dabas nelīdzenumi, kas var šķist haotiski, piemēram, jūras piekrastes līnija, mākoņu forma, koks, patiesībā ir ļoti sarežģītas ģeometrijas izpausme mainīgā mērogā. Šajā kontekstā daļējas dimensijas jēdziens aizstāj parasto Eiklida dimensiju (kas vienmēr ir vesels skaitlis)!

Fraktalais objekts ir tāds, ka jebkura tā daļa ir identiska veselumam (to sauc par pašlīdzību): tā struktūra ir nemainīga mēroga izmaiņu dēļ.

Termins "fraktālis" ir neoloģisms, ko 1974. gadā radījis Beno Mandels Brūts no latīņu saknes fraktuss, kas nozīmē "salauzts", "neregulārs". Tas ir gan lietvārds, gan īpašības vārds. Daudzām dabas parādībām, piemēram, piekrastes kontūrai vai romānikas kāpostu izskatam (skat. Attēlu), ir aptuvenas fraktāļu formas.

Beno Mandambrotam bija nedaudz netipiska karjera: pēc pasniegšanas Lilles universitātē (Francija) viņš ieņēma amatu IBM, kur ātri kļuva par IBM stipendiātu, kas deva viņam lielu brīvību zinātniskajām studijām. Astoņdesmito gadu sākumā, pēc aiziešanas no IBM, viņš kļuva par profesoru Hārvardā, bet pastāvīgi apmetās Jēlā.

Viņa darbs pagājušā gadsimta sešdesmitajos un septiņdesmito gadu sākumā lika viņam publicēt slavenu rakstu ar nosaukumu "Fraktālie objekti", kurā viņš parādīja, ka šie objekti, kurus liela daļa matemātikas sabiedrības uzskata par vienkāršiem kurioziem, ir sastopami visur dabā. Viņš minēja daudz piemēru visdažādākajās jomās, piemēram, fizikā, hidroloģijā, finansēs, meteoroloģijā, ģeogrāfijā, ģeoloģijā, metalurģijā …

Kas ir Mandelbrota komplekts?

Lai sāktu, pieņemsim, ka tas ir jauks programmas ģenerēts zīmējums. Un šī programma ir diezgan vienkārša. Ir daudz datoru ģenerētu zīmējumu un daudz datoru programmatūras, lai tos ģenerētu. Kas tad šajā ir tik īpašs? Pirmkārt, Mandelbrota kopa ir plāna apakškopa, punktu kolekcija. Tajā ir apgabali, bet arī gludas līknes, pavedieni, punkti, no kuriem izplūst vairāki zari, un citas lietas. Otrkārt: tas ir patiešām aizraujoši, un tam ir ļoti interesanta vēsture.

20. gadsimta sākumā franču matemātiķi Pjērs Fatou un Gastons Džūlija izstrādāja matemātikas apakšdomēnu, ko sauca par holomorfu dinamiku. Viņus interesēja konkrētas funkcijas, kas iedarbojās uz skaitļiem, izmantojot dažas no vienkāršākajām pieejamajām formulām. Attiecīgie skaitļi ir sarežģīti skaitļi, lielumi, ko attēlo divas koordinātas (tāpat kā plaknes punkti), ko sauc par reālajām un iedomātajām daļām. Tos izgudroja 16. gadsimtā matemātiķi, lai palīdzētu atrast polinomu saknes un vienādojumu risinājumu, bet ir atraduši plašu un dziļu pielietojumu matemātikā un fizikālajās zinātnēs. Mēs varam pievienot 2 sarežģītus skaitļus, reizināt vai dalīt tos un darīt daudzas citas lietas. Fatou un Džūlija pētīja noteiktu dinamisko sistēmu īpašības, kurās sarežģīts skaitlis mainās saskaņā ar vienkāršu noteikumu, kas tiek atkārtots atkal un atkal: šeit nav nepieciešama sarežģīta matemātika (Tātad, jūs varat aizmirst pirmo attēlu …). Viņi atklāja šo sistēmu bagātību, definēja kopas, kuras tagad sauc par Džūlijas kopām, un pētīja to līdzību sev, tāpēc fraktāļu aspektu… bet vārds tajā laikā neeksistēja, jo to izgudroja tikai daudz vēlāk, Benoits Mandelbrots!

Pēc dibinātāju darba šis domēns nonāca aizmirstībā. Kad datori ieradās, tie palīdzēja izpētīt daudzas matemātiskas parādības, kurām nepieciešama intensīva skaitļošana, tostarp domēnu, ko atvēra Džūlija un Fatou. Tādējādi, kad Beno Mandls Brūts astoņdesmitajos gados nolēma izmantot IBM datorus, lai attēlotu noteiktu matemātisku kopu, kas saistīta ar holomorfu dinamiku, viņš ieguva ļoti pievilcīgu un ļoti intriģējošu zīmējumu (iepriekšējās sadaļas pirmais attēls).

Ko attēlo Mandelbrota kopa? Būtībā ar katru attēla punktu ir saistīta dinamiska sistēma. Punkta koordinātas darbojas kā regulējams parametrs. Dažādi punkti atbilst dažādiem Jūlijas komplektiem, un atkarībā no viņu uzvedības mēs varam izlemt krāsu krāsot noteiktā veidā. Mandelbrota kopa ir parametru kopums, kuram sistēmai ir noteikts īpašums.

Kā aprēķināt Mandelbrota un Džūlijas kopas?

Mums ir jāiedziļinās sīkāk, kā aprēķināt šīs kopas. Mandelbrota un Džūlijas kopas tiek aprēķinātas, atkārtojot vienkāršu formulu, mūsu gadījumā z^n+c. z ir komplekss skaitlis, kas attēlo displeja punkta koordinātas. ir vesels skaitlis eksponents, tāpēc z^n ir vienāds ar z, kas reizināts ar sevi n reizes, un c ir konstante.

Mandelbrota kopai visos displeja apgabala punktos mēs inicializējam z līdz 0. Konstante c tiek ņemta vienāda ar attiecīgā punkta koordinātu vērtību un formula tiek atkārtota.

Šeit ir noteikums: punkts ir kopas sastāvdaļa, ja šīs formulas atkārtota pielietošana neatšķiras (t.i., neizraisa aprēķinus lieliem skaitļiem). Matemātiski var pierādīt, ka, ja formulas rezultāts pārsniedz 2 (modulī, jo mēs runājam par kompleksiem skaitļiem), iterācija atšķirsies. Tātad, lai ātri iegūtu skaistas krāsas, mēs pārtraucam atkārtojumu, kad rezultāta modulis pārsniedz 2 un krāsa atbilst šīs iterācijas skaitam. Ja atkārtojumu skaits kļūst pārāk liels (tātad, ja punkts ir daļa no Mandelbrota kopas), mēs apstājamies pēc noteiktā sliekšņa un saistām melno krāsu ar šo punktu.

Jūlijas kopu aprēķina līdzīgi, bet aprēķini netiek inicializēti ar 0, bet pēc aplūkotā punkta koordinātu vērtības un konstante c tiek izvēlēta lietotāja un paliek nemainīga visam attēlam.

Tieši tā, es ceru, ka tas ir skaidrs … Šie skaidrojumi palīdz labāk izprast pārējās lietošanas instrukcijas.

2. darbība. Kas jums nepieciešams?

Ko tev vajag?
Ko tev vajag?
Ko tev vajag?
Ko tev vajag?
Ko tev vajag?
Ko tev vajag?
Ko tev vajag?
Ko tev vajag?

Materiālu saraksts:

  • 1 ESP32 tāfele
  • 1 TFT displejs ar skārienekrānu un irbuli
  • 1 maizes dēlis un vadi

Tieši tā. Kopējās izmaksas zem 10 USD.

Espressif ESP32 ir divkodolu mikrokontrolleris, kas darbojas ar frekvenci 240 MHz, kas padara to par labu kandidātu ātrai un sarežģītai atkārtotai skaitļošanai. Tam ir WiFi un Bluetooth iespējas, kuras es neizmantoju šajā projektā.

Instrukciju kopa ir 32 biti. Skaitļošana ar 16 un 32 bitu mainīgajiem ir ļoti ātra, kas ļauj veikt precīzus aprēķinus, kas ir būtiski tālummaiņas nolūkos. Šajā lietojumprogrammā 320 x 240 displejam attēls ir aptuveni veidots no 75 000 pikseļiem, no kuriem katrs tiek aprēķināts, izmantojot atkārtotu procesu, kas var darboties līdz 100 reizēm. Tas var novest pie 7 500 000 vienotu aprēķinu, no kuriem katrs ir eksponēšana, t.i., vairāki reizinājumi …

Tātad aprēķina ātrums šeit ir būtisks, bet precizitāte ir būtiska. Jo vairāk pietuvināsit, jo mazāks būs attēlojamās komplekta daļas izmērs. Tas nozīmē, ka katrs no attēla 320 x 240 pikseļiem apzīmē skaitli, kas ir ļoti tuvu tās kaimiņiem. Palielinoties tālummaiņai, šis tuvums palielinās.

Bet fraktāļu attēliem ir šī īpašība, ka tie paliek nemainīgi, mērogojot. Tātad mazas detaļas parādās visur un jebkuram mērogošanas faktoram. Mandelbrota komplekta galveno formu, kā redzams displejā iepriekš redzamajā attēlā, var atrast kaut kur citur daudz mazākā versijā, un to var parādīt, ja pietuvināt pietiekami tuvu (skat. Video). Bet, ja koordinātu starpība starp diviem kaimiņu pikseļiem ir pārāk maza, lai ESP32 varētu uztvert atšķirības uzvedībā, precizitātes trūkuma dēļ fraktāļu efektu nevar parādīt …

Lai iegūtu labu precizitāti, kodā tiek izmantoti pludiņi, kurus ESP32 kodē 32 bitos. Tas nodrošina līdz 6 vai 7 tālummaiņas līmeņiem. Izmantojot dubultu precizitāti (64 biti), būtu palielināts šis tālummaiņas dziļums par lēnāku aprēķinu cenu, tātad ilgāks laiks starp 2 attēliem.

Lai padarītu to dubultu precizitāti, vienkārši mainiet visus "pludiņa" gadījumus uz "dubultā" kodā un palaidiet kodu. Nesen izveidoju versiju lielākam displejam (HVGA 480 x 320 pikseļi): 16 bitu pludiņiem attēla parādīšanai nepieciešamas 3 sekundes, bet dubultā - no 10 līdz 20 sekundēm (3 līdz 6 reizes ilgāk), bet tiek atbalstīti vairāk nekā 15 tālummaiņas līmeņi. Trešajā šīs nodaļas attēlā redzams 14. tālummaiņas līmenis Mandelbrota kopas labajā pusē.

Kā savienot displeju:

Es izmantoju SPI displeju, un parametri ir iestatīti failā User_Setup.h (TFT_eSPI bibliotēkas mapē):

  • Vadītājs: komentējiet pareizo displeja draiveri. Mans bija #define RPI_ILI9486_DRIVER
  • Pin numuri: dodieties uz faila sadaļu ESP32 un izvēlieties

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Mikroshēmas atlases vadības tapa
    • #define TFT_DC 2 // Datu komandas vadības tapa
    • #define TFT_RST 4 // Atiestatīt tapu (varētu izveidot savienojumu ar RST tapu)
    • #define TOUCH_CS 22 // Skārienekrāna mikroshēmas atlases tapa (T_CS)
  • Fonti: nav nepieciešams tos mainīt
  • Citas iespējas: Es izvēlējos sekojošo

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

Visas pārējās faila rindas tiek komentētas.

Kalibrējiet displeja skārienjūtību

Ja ekrāna daļas vai pogas izvēle nav precīza vai pat pilnīgi nepareiza, palaidiet skārienkalibrēšanas skici no TFT_eSPI bibliotēkas un nokopējiet / ielīmējiet tajā sniegto masīvu kodā (noteikti izmantojiet pareizo displeja orientācijas vērtību, 1 vai 3 ainavai).

3. darbība: ESP32 programma

Programma ESP32
Programma ESP32
Programma ESP32
Programma ESP32
Programma ESP32
Programma ESP32

Kods tiek parādīts 320 x 240 TFT skārienekrānā un izmanto TFT_eSPI bibliotēku. Tas aprēķina Mandelbrota un Džūlijas kopas vairākām eksponentu vērtībām un ļauj tuvināt interesējošās jomas, lai redzētu fraktāļu aspektu (t.i., to pašu struktūru klātbūtni katrā skalas maiņā).

Pievienotais kods ir 480 x 320 displeja versija. Šajā versijā varat mainīt displeja izmēru (platumu un augstumu pikseļos). TFT_eSPI bibliotēka nosaka savienojumus iestatīšanas failā (pievienots), kas jāievieto bibliotēkas direktorijā.

Kods sākas, parādot lietošanas instrukciju (skatiet attēlu un video)

Lielākā daļa ekrāna ir rezervēta attēlu parādīšanai, skārienjutīgās pogas ir pieejamas ekrāna labajā pusē:

  • R: veic "atiestatīšanu", t.i. e. parāda attēlu maksimālajā mērogā,
  • U: "atsaukt" ļauj atgriezties pie iepriekšējās darbības (ja tuvinātais reģions nav interesants, varat izvēlēties citu attēla daļu, lai tuvinātu),
  • M vai J: ļauj pārslēgties no Mandelbrota komplekta uz Džūlijas komplektu un otrādi.

Dažu taustiņu etiķetes mainās atkarībā no konteksta: tie parāda funkciju, kas tiks izpildīta, nospiežot. Tātad, ja jūs pašlaik parādāt Mandelbrota kopu, taustiņš M/J parāda J, jo, nospiežot to, jūs parādīsit Jūlijas komplektu (un otrādi).

Tas pats attiecas uz krāsu paletes izvēli. Mēs sākam ar zaļo paleti. Atslēga piedāvā nākamo paleti (zilo). Paletes ir: sarkana, zaļa, zila, pelēka, 1. palete, 2. palete un atpakaļ uz sarkanu. Pēdējie divi ir daudzkrāsaini palešu testi, kas nodrošina lielāku kontrastu, ļaujot labāk redzēt dažas detaļas.

Taustiņš ar skaitli ļauj izvēlēties eksponentu n, cilpā no 2 līdz 7 (un atpakaļ uz 2). Tādā pašā veidā tas parāda 3, ja pašlaik esat 2…

Visbeidzot, parādot Julia komplektu, ir jāizvēlas konstantes c vērtība: C taustiņš ļauj to izdarīt, pateicoties selektoram (sk. Otro attēlu). Šīs konstantes vērtība tiek parādīta kopā ar kopu.

Noklikšķinot uz attēla, tiek tuvināts ap izvēlēto punktu. Pieskartā vietā tiek parādīts neliels aplis, un komplekta tuvināto zonu izceļ taisnstūris.

Trešajā attēlā redzams, ka skaitļošanas laiks 320 x 240 pikseļiem paliek no 0,8 līdz 1,2 sekundēm, kas ļauj ērti tuvināt un attēlot. Tas sasniedz 3 sekundes 480 x 320 pikseļiem, bet sniedz sīkāku informāciju.

4. darbība: izskaidroti daži attēli…

Dažas bildes paskaidrotas…
Dažas bildes paskaidrotas…
Dažas bildes paskaidrotas…
Dažas bildes paskaidrotas…
Dažas bildes paskaidrotas…
Dažas bildes paskaidrotas…

Lielākais attēls ir labi pazīstamais Mandelbrota komplekts. Šajā attēlā izmantotie kompleksie skaitļi svārstās no -2,1 līdz +0,7 abscisā un -1,2 līdz 1,2 ordinātos. Ja pietuvināsit šī pirmā attēla kreiso daļu, iespējams, beidzot iegūsit otro attēlu, kurā tiek parādīta oriģināla komplekta mazāka versija, kas atrodama komplekta kreisajā galā. Abiem šiem attēliem eksponents ('n') ir vienāds ar 2: tā ir vērtība, ko parasti izmanto Mandelbrota kopu attēlošanai.

Ja maināt šo vērtību uz 3 (vienkārši noklikšķiniet uz taustiņa, sakot 3), jūs iegūsit trešo attēlu. Viena acīmredzama atšķirība ir simetrijas koeficients: n = 2 dod aksiālu simetriju (ti, kopa ir simetriska pret vidējo horizontālo asi), bet ar n = 3 attēls kļūst nemainīgs, pagriežot 120 ° (viena trešdaļa no 360 °, rotācija) simetrijas koeficients 3). Un tas saglabā savas fraktāļu īpašības, kuras varat pārbaudīt, pietuvinot melnās formas malas.

Ceturtais attēls ir Jūlijas kopa, kas iegūta pēc koeficienta vērtības izvēles, kas vienāda ar 0,414 abscisā un 0,09 ordinācijā. Sarkanā palete ir izvēlēta, kā to var redzēt ar zaļo taustiņu labajā pusē (zaļa, kas ir nākamā krāsa, kas jāizvēlas). Piektais attēls parāda tāda paša veida Julia komplektu, kas ir konstantes augstākā iedomātā daļa (0,358).

Es ceru, ka jums patiks spēlēties ar šo programmu un varēsit parādīt jaukus fraktāļu attēlus. Nevilcinieties izpētīt Mandelbrota un Džūlijas komplektus un spēlējiet ar paletēm: tās palīdz noteikt dažas detaļas, kuras, iespējams, nav redzamas ar vienkāršajām vienkrāsainajām. Jūs pat varat atklāt dažas fraktāļu ainavas, kuras neviens pirms jums nav redzējis …

_

Vai vēlaties atklāt vairāk fraktāļu attēlu? Vienkārši noklikšķiniet šeit vai izpētiet fraktāļu mākslu vai pat ascii fraktālu. Varbūt šī pamācība liks jums radīt tik lieliskus attēlus …

Izgatavots ar matemātikas konkursu
Izgatavots ar matemātikas konkursu
Izgatavots ar matemātikas konkursu
Izgatavots ar matemātikas konkursu

Otrā balva konkursā “Izgatavots ar matemātiku”

Ieteicams: