Turinys:

Mandelbrotas ir Julija nustato ESP32: 4 žingsniai (su nuotraukomis)
Mandelbrotas ir Julija nustato ESP32: 4 žingsniai (su nuotraukomis)

Video: Mandelbrotas ir Julija nustato ESP32: 4 žingsniai (su nuotraukomis)

Video: Mandelbrotas ir Julija nustato ESP32: 4 žingsniai (su nuotraukomis)
Video: СНАСТЬ ГИРЛЯНДА (Паровоз) - САМАЯ УЛОВИСТАЯ Снасть для Зимней Рыбалки. Как Сделать, Связать 2024, Lapkritis
Anonim
Image
Image
Mandelbrotas ir Julija nustato ESP32
Mandelbrotas ir Julija nustato ESP32
Mandelbrot ir Julia nustato ESP32
Mandelbrot ir Julia nustato ESP32

Jūs tikrai žinote fraktalus, iš kurių garsiausias yra Mandelbroto rinkinys.

Čia yra programa, skirta žaisti su ESP32. Aš pasirinkau ESP32, nes manau, kad jis atliks skaičiavimus greičiau nei standartinis „Arduino“(didesnis laikrodžio dažnis: 240 MHz): maždaug nuo sekundės iki pusantros skaičiavimui ir rodymui.

Kodas rodomas 480 x 320 TFT jutikliniame ekrane. Jis apskaičiuoja Mandelbrot ir Julia rinkinius kelioms parametrų reikšmėms ir leidžia priartinti dominančias sritis, kad pamatytumėte fraktalinį aspektą (t. Y. Tų pačių struktūrų buvimą kiekviename skalės keitime). Priartinimo lygis yra ribotas dėl riboto skaičiavimų tikslumo, tačiau prieš pabloginant vaizdą galima padaryti pusšimtį priartinimų.

Pasiruoškite tyrinėti stebuklingą fraktalų pasaulį …

1 žingsnis: kas yra Mandelbroto ir Julijos rinkiniai?

Kas yra Mandelbroto ir Julijos rinkiniai?
Kas yra Mandelbroto ir Julijos rinkiniai?
Kas yra Mandelbroto ir Julijos rinkiniai?
Kas yra Mandelbroto ir Julijos rinkiniai?
Kas yra Mandelbroto ir Julijos rinkiniai?
Kas yra Mandelbroto ir Julijos rinkiniai?

„Mandelbrot“rinkinys pavadintas prancūzų ir amerikiečių matematiko Benoito Mandelbroto (1924–2010), kuris atliko fraktalinės geometrijos pionierių darbą, kurį XIX amžiaus pabaigoje inicijavo, be kita ko, Peano, Sierpinski ir Julija.

Kas yra fraktaliniai objektai?

Gamtos nelygumai, kurie gali atrodyti chaotiški, pavyzdžiui, jūros pakrantės linija, debesų forma, medis, iš tikrųjų yra labai sudėtingos geometrijos išraiška besikeičiančiame maste. Šiame kontekste trupmeninio matmens sąvoka pakeičia įprastą Euklido dimensiją (kuri visada yra sveikas skaičius)!

Fraktalas yra toks, kad bet kuri jo dalis yra identiška visumai (tai vadinama savęs panašumu): jo struktūra yra nekintama dėl masto pokyčių.

Terminas „fraktalas“yra neologizmas, sukurtas Benoît Mandelbrot 1974 m. Tai ir daiktavardis, ir būdvardis. Daugelis gamtos reiškinių, pvz., Pakrantės kontūrai ar Romanesco kopūstų išvaizda (žr. Paveikslėlį), turi apytikslę fraktalų formą.

Benoîtas Mandelbrotas turėjo šiek tiek netipinę karjerą: po dėstymo Lilio universitete (Prancūzija) jis užėmė poziciją IBM, kur greitai tapo IBM bendradarbiu, o tai suteikė jam didelę laisvę moksliniams tyrimams. Devintojo dešimtmečio pradžioje, palikęs IBM, jis tapo Harvardo profesoriumi, tačiau visam laikui apsigyveno Jele.

Jo darbas septintajame ir aštuntajame dešimtmečiuose paskatino jį paskelbti garsų straipsnį pavadinimu „Fraktaliniai objektai“, kuriame jis parodė, kad šie objektai, kuriuos didžioji dalis matematikų bendruomenės laiko tik įdomybėmis, randami visur gamtoje. Jis pateikė daug pavyzdžių įvairiose srityse, tokiose kaip fizika, hidrologija, finansai, meteorologija, geografija, geologija, metalurgija….

Kas yra Mandelbroto rinkinys?

Norėdami pradėti, tarkime, kad tai gražus piešinys, sukurtas programos. Ir ši programa yra gana paprasta. Yra daug kompiuterio sukurtų brėžinių ir daug kompiuterinės programinės įrangos jiems generuoti. Taigi kuo šis ypatingas? Pirma, „Mandelbrot“rinkinys yra plano pogrupis, taškų rinkinys. Jame yra sričių, bet ir lygių kreivių, gijų, taškų, iš kurių kyla kelios šakos, ir kitų dalykų. Antra: tai tikrai žavi ir turi labai įdomią istoriją.

XX amžiaus pradžioje prancūzų matematikai Pierre'as Fatou ir Gastonas Julija sukūrė matematikos potomenį, vadinamą holomorfine dinamika. Jie domėjosi konkrečiomis funkcijomis, veikė skaičiais, naudodamiesi paprasčiausiomis formulėmis. Nagrinėjami skaičiai yra sudėtingi skaičiai, kiekiai, pavaizduoti dviem koordinatėmis (kaip ir plokštumos taškai), vadinami realiomis ir įsivaizduojamomis dalimis. XVI amžiuje juos sugalvojo matematikai, padėję rasti daugianarių šaknis ir lygčių sprendimą, tačiau jie plačiai ir giliai pritaikė matematiką ir fizinius mokslus. Mes galime pridėti 2 sudėtingus skaičius, juos padauginti arba padalyti ir atlikti daug kitų dalykų. Fatou ir Julia studijavo tam tikrų dinaminių sistemų ypatybes, kai sudėtingas skaičius kinta pagal paprastą taisyklę, kartojamą vėl ir vėl: čia nereikia sudėtingos matematikos (Taigi, galite pamiršti pirmąjį vaizdą …). Jie atskleidė šių sistemų turtingumą, apibrėžė aibes, kurios dabar vadinamos Julijos aibėmis, ir ištyrė jų panašumą, taigi ir fraktalinį aspektą … tačiau žodis tuo metu neegzistavo, nes jis buvo išrastas tik daug vėliau, Benoît Mandelbrot!

Po steigėjų darbo ši sritis pateko į užmarštį. Kai kompiuteriai atvyko, jie padėjo ištirti daugybę matematinių reiškinių, kuriems reikia intensyvaus skaičiavimo, įskaitant Julijos ir Fatou atidarytą domeną. Taigi, kai Benoît Mandelbrot devintajame dešimtmetyje nusprendė naudoti IBM kompiuterius tam tikram matematiniam rinkiniui, susijusiam su holomorfine dinamika, atstovauti, jis gavo labai patrauklų ir labai intriguojantį piešinį (pirmoji ankstesnio skyriaus nuotrauka).

Ką reiškia Mandelbroto rinkinys? Iš esmės yra pagrindinė dinaminė sistema, susieta su kiekvienu vaizdo tašku. Taško koordinatės veikia kaip reguliuojamas parametras. Skirtingi taškai atitinka skirtingus Julijos rinkinius ir, priklausomai nuo jų elgesio, galime nuspręsti nuspalvinti tašką tam tikru būdu. „Mandelbrot“rinkinys yra parametrų rinkinys, kuriam sistema turi tam tikrą savybę.

Kaip apskaičiuoti Mandelbroto ir Julijos rinkinius?

Turime šiek tiek išsamiau apsvarstyti, kaip apskaičiuoti šiuos rinkinius. Mandelbroto ir Julijos rinkiniai apskaičiuojami kartojant paprastą formulę, mūsų atveju z^n+c. z yra sudėtingas skaičius, vaizduojantis taško koordinates ekrane. yra sveikasis skaičius, todėl z^n yra lygus z, padaugintam iš savęs n kartų, o c yra konstanta.

Mandelbroto rinkiniui visuose rodymo srities taškuose inicijuojame z iki 0. Konstanta c imama lygi svarstomo taško koordinačių vertei ir formulė kartojama.

Čia yra taisyklė: taškas yra rinkinio dalis, jei pakartotinai taikant šią formulę nesiskiria (t. Y. Nereikia skaičiuoti didelių skaičių). Galima matematiškai parodyti, kad jei formulės rezultatas viršys 2 (moduliu, nes mes kalbame apie sudėtingus skaičius), iteracija skirsis. Taigi norėdami greitai gauti gražias spalvas, sustabdome iteraciją, kai rezultato modulis viršija 2 ir spalva atitinka tos iteracijos skaičių. Jei pakartojimų skaičius tampa per didelis (taigi, jei taškas yra Mandelbroto rinkinio dalis), mes sustojame po tam tikros ribos ir susiejame juodą spalvą su šiuo tašku.

„Julija“rinkinys apskaičiuojamas panašiai, tačiau skaičiavimai inicijuojami ne 0, bet pagal svarstomo taško koordinates, o vartotojas pasirenka konstantą c ir išlieka ta pati visam vaizdui.

Tikiuosi, kad viskas aišku … Šie paaiškinimai padeda geriau suprasti likusias naudojimo instrukcijas.

2 žingsnis: ko jums reikia?

Ko tau reikia?
Ko tau reikia?
Ko tau reikia?
Ko tau reikia?
Ko tau reikia?
Ko tau reikia?
Ko tau reikia?
Ko tau reikia?

Sąrašas medžiagos:

  • 1 ESP32 plokštė
  • 1 TFT ekranas su jutikliniu ekranu ir rašikliu
  • 1 duonos lenta ir laidai

Viskas. Bendra kaina yra mažesnė nei 10 USD.

„Espressif“ESP32 yra dviejų branduolių mikrokontroleris, veikiantis 240 MHz dažniu, todėl jis yra geras greito ir sudėtingo pasikartojančio skaičiavimo kandidatas. Jis turi „WiFi“ir „Bluetooth“galimybes, kurių nenaudoju šiame projekte.

Instrukcijų rinkinys yra 32 bitų dydžio. Skaičiavimas naudojant 16 ir 32 bitų kintamuosius yra labai greitas, todėl galima atlikti tikslius skaičiavimus, o tai yra esminis mastelio keitimo tikslas. Šioje programoje 320 x 240 ekrano vaizdas yra apytiksliai sudarytas iš 75 000 pikselių, kurių kiekvienas apskaičiuojamas naudojant pasikartojantį procesą, kuris gali vykti iki 100 kartų. Dėl to gali būti atlikti 7 500 000 vienetinių skaičiavimų, kurių kiekvienas yra eksponentas, t.

Taigi skaičiavimo greitis čia yra būtinas, tačiau tikslumas yra esminis. Kuo daugiau priartinsite, tuo mažesnė bus rodomos rinkinio dalies dydis. Tai reiškia, kad kiekvienas iš 320 x 240 vaizdo taškų reiškia skaičių, kuris yra labai artimas jo kaimynams. Didinant mastelį, šis artumas didėja.

Tačiau fraktalų vaizdai turi tokią savybę, kad jie išlieka nepakitę keičiant mastelį. Taigi mažos detalės atsiranda visur ir bet kokiam mastelio keitimo veiksniui. Pagrindinę „Mandelbrot“rinkinio formą, kaip parodyta aukščiau esančiame paveikslėlyje, galima rasti kur nors kitur, kur yra daug mažesnė versija, ir ji gali būti rodoma, jei priartinate pakankamai arti (žr. Vaizdo įrašą). Bet jei koordinačių skirtumas tarp dviejų kaimyninių pikselių yra per mažas, kad ESP32 galėtų suvokti jų elgesio skirtumus, dėl tikslumo stokos fraktalo efekto negalima parodyti …

Norint gauti gerą tikslumą, kodas naudoja plūdes, kurias ESP32 koduoja 32 bitais. Tai leidžia iki 6 ar 7 mastelio keitimo lygių. Naudojant dvigubą tikslumą (64 bitai) šis priartinimo gylis būtų padidintas lėčiau skaičiuojant, taigi ir ilgiau tarp 2 vaizdų.

Kad būtų dvigubas tikslumas, tiesiog pakeiskite visus „plūdės“įvykius į „dvigubą“kode ir paleiskite kodą. Neseniai sukūriau didesnio ekrano versiją (HVGA 480 x 320 pikselių): 16 bitų plūdės vaizdą parodo per 3 sekundes, o dvigubai - nuo 10 iki 20 sekundžių (3–6 kartus ilgiau), tačiau palaiko daugiau nei 15 mastelio keitimo lygių. Trečiame šio skyriaus paveikslėlyje parodytas 14 mastelio keitimo lygis dešinėje Mandelbrot rinkinio dalyje.

Kaip prijungti ekraną:

Naudojau SPI ekraną, o parametrai nustatyti faile User_Setup.h (TFT_eSPI bibliotekos aplanke):

  • Vairuotojas: pakomentuokite tinkamą ekrano tvarkyklę. Mano buvo #define RPI_ILI9486_DRIVER
  • PIN kodai: eikite į failo ESP32 skyrių ir pasirinkite

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Lusto pasirinkimo valdymo kaištis
    • #define TFT_DC 2 // Duomenų komandos valdymo kaištis
    • #define TFT_RST 4 // Iš naujo nustatyti kaištį (galima prijungti prie RST kaiščio)
    • #define TOUCH_CS 22 // Jutiklinio ekrano lusto pasirinkimo kaištis (T_CS)
  • Šriftai: nereikia jų keisti
  • Kiti variantai: pasirinkau šiuos

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

Visos kitos failo eilutės yra komentuojamos.

Kalibruokite ekrano jutiklinį pajėgumą

Jei ekrano dalis arba mygtukas pasirinktas netiksliai arba net visiškai neteisingai, paleiskite jutiklinio kalibravimo eskizą iš TFT_eSPI bibliotekos ir nukopijuokite / įklijuokite į kodą, kurį jis pateikia (būtinai naudokite teisingą ekrano orientacijos vertę), 1 arba 3 kraštovaizdžiui).

3 žingsnis: ESP32 programa

ESP32 programa
ESP32 programa
ESP32 programa
ESP32 programa
ESP32 programa
ESP32 programa

Kodas rodomas 320 x 240 TFT jutikliniame ekrane ir naudoja TFT_eSPI biblioteką. Jis apskaičiuoja Mandelbroto ir Julijos rinkinius kelioms eksponentinėms reikšmėms ir leidžia priartinti dominančias sritis, kad pamatytumėte fraktalinį aspektą (t. Y. Tų pačių struktūrų buvimą kiekviename skalės keitime).

Pridedamas kodas yra 480 x 320 ekrano versija. Šioje versijoje galite pakeisti ekrano dydį (plotį ir aukštį pikseliais). TFT_eSPI biblioteka apibrėžia sąsajas sąrankos faile (pridedamas), kuris turi būti įrašytas į bibliotekos katalogą.

Kodas pradedamas rodant naudojimo instrukciją (žr. Paveikslėlį ir vaizdo įrašą)

Didžioji ekrano dalis skirta vaizdams rodyti, jutikliniai mygtukai yra dešinėje ekrano pusėje:

  • R: atlieka „atstatymą“, t. e. parodo vaizdą maksimaliu masteliu,
  • U: „anuliuoti“leidžia grįžti prie ankstesnio veiksmo (jei priartinta sritis nėra įdomi, galite pasirinkti kitą vaizdo dalį, kurią norite padidinti),
  • M arba J: leidžia persijungti iš Mandelbroto rinkinio į Julijos rinkinį ir atvirkščiai.

Kai kurių klavišų etiketės keičiasi atsižvelgiant į kontekstą: juose rodoma funkcija, kuri bus vykdoma paspaudus. Taigi, jei šiuo metu rodote „Mandelbrot“rinkinį, klavišu M/J rodomas J, nes jį paspaudus rodomas Julijos rinkinys (ir atvirkščiai).

Tas pats pasakytina ir apie spalvų paletės pasirinkimą. Mes pradedame nuo žalios paletės. Raktas siūlo kitą paletę (mėlyną). Paletės yra: raudona, žalia, mėlyna, pilka, 1 paletė, 2 paletė ir atgal į raudoną. Paskutiniai du yra daugiaspalviai paletės bandymai, kurie suteikia daugiau kontrasto ir leidžia geriau matyti kai kurias detales.

Klavišas su skaičiumi leidžia pasirinkti eksponentą n, cikle nuo 2 iki 7 (ir atgal į 2). Ta pati dvasia rodo 3, jei šiuo metu esate 2…

Galiausiai, rodant „Julia“rinkinį, būtina pasirinkti konstantos c vertę: klavišas C leidžia tai padaryti, naudojant selektorių (žr. Antrą paveikslėlį). Šios konstantos vertė rodoma kartu su rinkiniu.

Spustelėjus vaizdą, padidinamas aplink pasirinktą tašką. Paliestoje vietoje rodomas mažas apskritimas, o stačiakampis paryškina padidintą rinkinio zoną.

3 paveiksle parodyta, kad 320 x 240 pikselių skaičiavimo laikas išlieka nuo 0,8 iki 1,2 sekundės, todėl patogu priartinti ir rodyti. Jis pasiekia 3 sekundes 480 x 320 pikselių, tačiau suteikia daugiau informacijos.

4 žingsnis: paaiškintos kai kurios nuotraukos …

Kai kurios nuotraukos paaiškintos…
Kai kurios nuotraukos paaiškintos…
Kai kurios nuotraukos paaiškintos…
Kai kurios nuotraukos paaiškintos…
Kai kurios nuotraukos paaiškintos…
Kai kurios nuotraukos paaiškintos…

Didžiausias paveikslas yra gerai žinomas „Mandelbrot“rinkinys. Šiame paveikslėlyje naudojami kompleksiniai skaičiai svyruoja nuo -2,1 iki +0,7 abscisėje ir nuo -1,2 iki 1,2 ordinatėje. Jei priartinsite pačią kairę šio pirmojo vaizdo dalį, tikėtina, kad pagaliau gausite antrąjį, kuriame rodoma mažesnė pradinio rinkinio versija, rasta kairiajame rinkinio gale. Abiejuose šiuose vaizduose eksponentas („n“) yra lygus 2: tokia vertė paprastai naudojama Mandelbroto rinkiniams rodyti.

Jei pakeisite šią reikšmę į 3 (tiesiog spustelėkite klavišą 3), gausite trečią vaizdą. Vienas akivaizdus skirtumas yra simetrijos koeficientas: n = 2 suteikia ašinę simetriją (ty aibė yra simetriška horizontaliosios ašies vidurio atžvilgiu), tačiau esant n = 3, vaizdas pasisuka 120 ° (trečdalis 360 °, sukimasis) simetrijos koeficientas 3). Ir jis išlaiko savo fraktalines savybes, kurias galite patikrinti priartinę juodos formos kraštus.

Ketvirtasis vaizdas yra Julijos rinkinys, gautas pasirinkus koeficiento vertę, lygią 0,414 abscisėms ir 0,09 ordinatėms. Pasirinkta raudona paletė, kaip matyti iš dešinėje esančio žalio klavišo (žalia spalva - kita spalva). Penktame paveikslėlyje rodomas tos pačios rūšies Julijos rinkinys, kuris yra didesnė įsivaizduojama konstantos dalis (0,358).

Tikiuosi, kad jums patiks žaisti su šia programa ir galėsite parodyti gražias fraktalų nuotraukas. Nedvejodami tyrinėkite „Mandelbrot“ir „Julia“rinkinius ir žaiskite su paletėmis: jie padeda nustatyti kai kurias detales, kurios gali būti nematomos naudojant paprastas vienspalves. Jūs netgi galite atrasti keletą fraktalinių kraštovaizdžių, kurių niekas anksčiau nematė …

_

Norite atrasti daugiau fraktalinių vaizdų? Tiesiog spustelėkite čia arba tyrinėkite fraktalinį meną ar net ascii fraktalą. Galbūt šis pamokymas paskatins jus sukurti tokius puikius vaizdus …

Sukurtas su matematikos konkursu
Sukurtas su matematikos konkursu
Sukurtas su matematikos konkursu
Sukurtas su matematikos konkursu

Antrasis prizas konkurse „Pagaminta su matematika“

Rekomenduojamas: