Sisukord:

Mandelbrot ja Julia võtavad kasutusele ESP32: 4 sammu (piltidega)
Mandelbrot ja Julia võtavad kasutusele ESP32: 4 sammu (piltidega)

Video: Mandelbrot ja Julia võtavad kasutusele ESP32: 4 sammu (piltidega)

Video: Mandelbrot ja Julia võtavad kasutusele ESP32: 4 sammu (piltidega)
Video: XP02 - conversation, XP03 - fractal (20.09.2022) 2024, Juuli
Anonim
Image
Image
Mandelbrot ja Julia võtavad kasutusele ESP32
Mandelbrot ja Julia võtavad kasutusele ESP32
Mandelbrot ja Julia võtavad kasutusele ESP32
Mandelbrot ja Julia võtavad kasutusele ESP32

Kindlasti teate fraktaale, millest kuulsaim on Mandelbroti komplekt.

Siin on programm ESP32 -ga mängimiseks. Valisin ESP32, kuna arvan, et see teeb arvutused kiiremini kui tavaline Arduino (kõrgem taktsagedus: 240 MHz): arvutamiseks ja kuvamiseks umbes sekund kuni poolteist.

Kood kuvatakse 480 x 320 TFT puuteekraanil. See arvutab Mandelbroti ja Julia komplekti mitme parameetri väärtuse jaoks ning võimaldab teil huvipakkuvaid alasid suurendada, et näha fraktaalset aspekti (st samade struktuuride olemasolu igal skaala muutmisel). Suumimistase on arvutuste piiratud täpsuse tõttu piiratud, kuid enne pildi halvenemist saab teha pool tosinat suumi.

Ole valmis avastama fraktaalide võlumaailma …

Samm: mis on Mandelbroti ja Julia komplektid?

Mis on Mandelbroti ja Julia komplektid?
Mis on Mandelbroti ja Julia komplektid?
Mis on Mandelbroti ja Julia komplektid?
Mis on Mandelbroti ja Julia komplektid?
Mis on Mandelbroti ja Julia komplektid?
Mis on Mandelbroti ja Julia komplektid?

Mandelbroti komplekt on saanud nime Prantsuse ja Ameerika matemaatiku Benoit Mandelbroti (1924-2010) järgi, kes tegi fraktaalgeomeetriaga pioneeritööd, mille algatasid 19. sajandi lõpus teiste hulgas Peano, Sierpinski ja Julia.

Mis on fraktaalsed objektid?

Looduse ebakorrapärasused, mis võivad tunduda kaootilised, nagu mereranna joon, pilvede kuju, puu, on tegelikult väga keeruka geomeetria väljendus muutuvas mastaabis. Selles kontekstis asendab murdmõõtme mõiste tavalise eukleidilise mõõtme (mis on alati täisarv) mõiste!

Fraktaalobjekt on selline, et selle mis tahes osa on tervikuga identne (seda nimetatakse enesesarnasuseks): selle struktuur on skaala muutumise tõttu muutumatu.

Mõiste "fraktaal" on neologism, mille Benoît Mandelbrot lõi 1974. aastal ladina juurest fraktus, mis tähendab "katki", "ebaregulaarne". See on nii nimisõna kui ka omadussõna. Paljud loodusnähtused - näiteks rannajoonte piirjooned või Romanesco kapsa välimus (vt pilti) - on ligikaudse fraktaalse kujuga.

Benoît Mandelbrotil oli mõnevõrra ebatüüpiline karjäär: pärast õpetamist Lille'i ülikoolis (Prantsusmaa) asus ta ametikohale IBMis, kus temast sai kiiresti IBMi stipendiaat, mis andis talle teadusõpinguteks suure vabaduse. 1980ndate alguses, pärast IBMist lahkumist, sai temast Harvardi professor, kuid asus püsivalt Yale'i.

Tema töö 1960ndatel ja 1970ndate alguses pani ta avaldama kuulsa artikli pealkirjaga "Fraktaalsed objektid", milles ta näitas, et neid esemeid, mida suur osa matemaatikakogukonnast pidas pelgalt kurioosumiteks, leidus kõikjal looduses. Ta tõi palju näiteid erinevates valdkondades, nagu füüsika, hüdroloogia, rahandus, meteoroloogia, geograafia, geoloogia, metallurgia….

Mis on Mandelbroti komplekt?

Alustuseks oletame, et see on programmi loodud geniaalne joonis. Ja see programm on üsna lihtne. Nende loomiseks on palju arvutiga loodud jooniseid ja palju arvutitarkvara. Mis selles siis erilist on? Esiteks on Mandelbroti komplekt plaani alamhulk, punktide kogum. See sisaldab alasid, aga ka siledaid kõveraid, hõõgniite, punkte, millest väljub mitu haru, ja muid asju. Teiseks: see on tõesti põnev ja sellel on väga huvitav ajalugu.

20. sajandi alguses töötasid prantsuse matemaatikud Pierre Fatou ja Gaston Julia välja matemaatika alamvaldkonna, mida nimetatakse holomorfseks dünaamikaks. Neid huvitasid konkreetsed funktsioonid, mis toimisid numbrite alusel, kasutades mõnda lihtsamat saadaolevat valemit. Kõnealused numbrid on keerulised arvud, kogused, mida tähistavad kaks koordinaati (täpselt nagu tasapinna punktid), mida nimetatakse reaalseteks ja kujuteldavateks osadeks. Need leiutasid 16. sajandil matemaatikud, et aidata leida polünoomide juuri ja leida võrrandite lahendus, kuid on leidnud laialdasi ja sügavaid rakendusi matemaatikas ja füüsikateadustes. Saame liita 2 keerukat arvu, neid korrutada või jagada ja teha palju muid asju. Fatou ja Julia uurisid teatud dünaamiliste süsteemide omadusi, kus kompleksarv varieerub vastavalt lihtsale reeglile, mida korratakse ikka ja jälle: siin pole keerulisi matemaatikaid vaja (nii et võite esimese pildi unustada …). Nad paljastasid nende süsteemide rikkuse, määratlesid komplektid, mida praegu nimetatakse Julia komplektideks, ja uurisid nende sarnasust, seega fraktaalset aspekti … kuid sõna ei olnud sel ajal olemas, sest selle leiutas alles palju hiljem, Benoît Mandelbrot!

Pärast asutajate tööd jäi see domeen unustusse. Kui arvutid saabusid, aitasid nad uurida palju intensiivset arvutamist nõudvaid matemaatilisi nähtusi, sealhulgas Julia ja Fatou avatud domeeni. Seega, kui Benoît Mandelbrot otsustas 1980ndatel kasutada IBMi arvuteid, et kujutada teatud holomorfse dünaamikaga seotud matemaatilist komplekti, sai ta väga atraktiivse ja väga intrigeeriva joonise (eelmise pildi esimene pilt).

Mida kujutab endast Mandelbroti komplekt? Põhimõtteliselt on pildi iga punktiga seotud dünaamiline süsteem. Punkti koordinaadid toimivad reguleeritava parameetrina. Erinevad punktid vastavad erinevatele Julia komplektidele ja sõltuvalt nende käitumisest võime otsustada punkti värvida teatud viisil. Mandelbroti komplekt on parameetrite kogum, mille jaoks süsteemil on teatud omadus.

Kuidas arvutada Mandelbroti ja Julia hulki?

Peame nende komplektide arvutamiseks veidi üksikasjalikumalt uurima. Mandelbroti ja Julia hulgad arvutatakse lihtsa valemi, meie puhul z^n+c korduva iteratsiooni abil. z on kompleksarv, mis tähistab ekraanil oleva punkti koordinaate. on täisarvuline astendaja, seega on z^n võrdne z -ga, mis on korrutatud endaga n korda ja c on konstant.

Mandelbroti komplekti puhul initsialiseerime kõigi kuvatava ala punktide z väärtuseks 0. Konstant c võetakse võrdseks vaadeldava punkti koordinaatide väärtusega ja valemit korratakse.

Siin kehtib reegel: punkt kuulub komplekti, kui selle valemi korduv kasutamine ei erine (st ei too kaasa arvutusi suurte numbrite suunas). Matemaatiliselt saab näidata, et kui valemi tulemus ületab 2 (moodulis, kuna me räägime kompleksarvudest), siis iteratsioon lahkneb. Nii et ilusate värvide kiireks saamiseks peatame iteratsiooni, kui tulemuse moodul ületab 2 ja värv vastab selle konkreetse iteratsiooni arvule. Kui iteratsioonide arv muutub liiga suureks (nii et kui punkt on osa Mandelbroti komplektist), peatume pärast antud läve ja seostame musta värvi selle punktiga.

Julia komplekti arvutatakse sarnaselt, kuid arvutusi ei alustata 0 -ga, vaid vaadeldava punkti koordinaatide väärtusega ning konstant c valib kasutaja ja jääb samaks kogu pildi jaoks.

See on kõik, ma loodan, et see on selge … Need selgitused aitavad paremini mõista ülejäänud kasutusjuhendit.

2. samm: mida vajate?

Mida sul vaja on?
Mida sul vaja on?
Mida sul vaja on?
Mida sul vaja on?
Mida sul vaja on?
Mida sul vaja on?
Mida sul vaja on?
Mida sul vaja on?

Materjalide arve:

  • 1 ESP32 plaat
  • 1 puutetundliku ekraani ja pliiatsiga TFT -ekraan
  • 1 leivaplaat ja juhtmed

See on kõik. Kogumaksumus alla 10 USD.

Espressifi ESP32 on kahetuumaline mikrokontroller, mis töötab sagedusel 240 MHz, mis teeb sellest hea kandidaadi kiireks ja keerukaks korduvaks arvutamiseks. Sellel on WiFi ja Bluetoothi võimalused, mida ma selles projektis ei kasuta.

Juhendikomplekti suurus on 32 bitti. 16- ja 32 -bitiste muutujatega arvutamine on väga kiire, mis võimaldab täpseid arvutusi, mis on suumimise eesmärgil ülioluline. Selles rakenduses on 320 x 240 ekraani puhul pilt ligikaudu 75 000 pikslit, millest igaüks arvutatakse iteratiivse protsessi abil, mis võib kesta kuni 100 korda. See võib viia 7 500 000 ühikarvutuseni, millest igaüks on astendamine, st mitu korrutamist …

Seega on arvutamise kiirus siin hädavajalik, kuid täpsus on põhiline. Mida rohkem suumite, seda väiksem on näidatava komplekti osa suurus. See tähendab, et iga pildi 320 x 240 pikslit tähistab numbrit, mis on naabritele väga lähedal. Kui suum suureneb, suureneb see lähedus.

Kuid fraktaalkujutistel on see omadus, et need jäävad skaleerimisel muutumatuks. Nii ilmuvad väikesed detailid kõikjale ja mistahes mastaabiteguri jaoks. Mandelbroti komplekti põhikuju, nagu ülaltoodud pildil näidatud, võib leida kusagil mujal palju väiksemas versioonis ja seda kuvatakse, kui suumite piisavalt lähedale (vt videot). Aga kui koordinaatide erinevus kahe naaberpiksli vahel on liiga väike, et võimaldada ESP32 -l nende käitumise erinevust tabada, ei saa fraktaalset efekti ebatäpsuse tõttu näidata …

Hea täpsuse saamiseks kasutab kood ujukit, mille ESP32 kodeerib 32 bitti. See võimaldab kuni 6 või 7 suumimistaset. Topelttäpsuse (64 bitti) kasutamine oleks suurendanud seda suumimissügavust aeglasemate arvutuste hinnaga, seega kahe pildi vahel pikemat aega.

Kahekordse täpsuse muutmiseks muutke lihtsalt kõik "float" esinemised koodis "double" ja käivitage kood. Hiljuti tegin versiooni suurema ekraani jaoks (HVGA 480 x 320 pikslit): 16 -bitise ujukiga kulub pildi kuvamiseks 3 sekundit ja kahekordsega 10–20 sekundit (3–6 korda kauem), kuid see toetab rohkem kui 15 suumitaset. Selle peatüki kolmas pilt näitab suumimistaset 14 Mandelbroti komplekti parempoolses osas.

Ekraani ühendamine:

Kasutasin SPI -ekraani ja parameetrid on määratud failis User_Setup.h (TFT_eSPI raamatukogu kaustas):

  • Draiver: tühistage oma ekraani jaoks õige draiver. Minu oma oli #define RPI_ILI9486_DRIVER
  • Pin -numbrid: minge faili jaotisesse ESP32 ja valige

    • #defineeri TFT_MISO 19
    • #defineeri TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Kiibi juhtnupp
    • #define TFT_DC 2 // Andmekäsu juhtnööp
    • #define TFT_RST 4 // Lähtesta nööpnõel (saab ühendada RST tihvtiga)
    • #define TOUCH_CS 22 // Puuteekraani kiibi valimise tihvt (T_CS)
  • Fondid: neid pole vaja muuta
  • Muud valikud: valisin järgmise

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

Kõik muud faili read on kommenteeritud.

Kalibreerige ekraani puutetundlikkust

Kui ekraaniosa või nupu valik pole täpne või isegi täiesti vale, käivitage TFT_eSPI teegist puutega kalibreerimise visand ja kopeerige / kleepige selle pakutava massiivi koodi (kasutage kindlasti ekraani orientatsiooni jaoks õiget väärtust), 1 või 3 maastiku jaoks).

Samm: programm ESP32

Programm ESP32
Programm ESP32
Programm ESP32
Programm ESP32
Programm ESP32
Programm ESP32

Kood kuvatakse 320 x 240 TFT puuteekraanil ja kasutab TFT_eSPI raamatukogu. See arvutab Mandelbroti ja Julia komplekti mitme eksponentväärtuse jaoks ning võimaldab teil huvipakkuvaid alasid suurendada, et näha fraktaalset aspekti (st samade struktuuride olemasolu igal skaala muutmisel).

Lisatud kood on 480 x 320 ekraani versioon. Selles versioonis saate muuta ekraani suurust (laiust ja kõrgust pikslites). TFT_eSPI raamatukogu määratleb ühendused häälestusfailis (lisatud), mis tuleb panna raamatukogu kataloogi.

Kood algab kasutusjuhendi kuvamisega (vt pilti ja videot)

Suurem osa ekraanist on reserveeritud piltide kuvamiseks, puutetundlikud nupud on saadaval ekraani paremas servas:

  • R: teostab "lähtestamise", st. e. kuvab pildi maksimaalsel skaalal,
  • U: "undo" võimaldab teil naasta eelmise sammu juurde (kui suumitud piirkond pole huvitav, saate suumimiseks valida pildi teise osa),
  • M või J: võimaldab teil lülituda Mandelbroti komplektilt Julia komplektile ja vastupidi.

Mõne klahvi sildid muutuvad vastavalt kontekstile: need kuvavad funktsiooni, mis täidetakse vajutamisel. Seega, kui kuvate praegu Mandelbroti komplekti, kuvatakse klahvil M/J J, kuna selle vajutamisel kuvatakse Julia komplekt (ja vastupidi).

Sama kehtib ka värvipaleti valiku kohta. Alustame rohelise paletiga. Võti pakub järgmise paleti (sinine). Paletid on: punane, roheline, sinine, hall, palett 1, palett 2 ja tagasi punaseks. Viimased kaks on mitmevärvilised palettide testid, mis pakuvad rohkem kontrasti, võimaldades mõningaid detaile paremini näha.

Numbriga võti võimaldab teil valida astendaja n, silmusena 2 kuni 7 (ja tagasi 2 -ni). Samas vaimus kuvatakse 3, kui olete praegu 2…

Lõpuks on Julia komplekti kuvamisel vaja valida konstandi c väärtus: C -klahv võimaldab seda tänu valijale teha (vt teine pilt). Selle konstanti väärtus kuvatakse koos komplektiga.

Pildil klõpsates suumitakse valitud punkti ümber. Puudutatud kohas kuvatakse väike ring ja komplekti suumitud tsooni tõstab esile ristkülik.

Kolmas pilt näitab, et arvutusajad jäävad 320 x 240 piksli jaoks vahemikku 0,8–1,2 sekundit, mis muudab suumimise ja kuvamise mugavaks. See ulatub 480 x 320 piksli jaoks 3 sekundini, kuid annab rohkem üksikasju.

Samm: selgitage mõningaid pilte…

Mõned pildid on selgitatud…
Mõned pildid on selgitatud…
Mõned pildid on selgitatud…
Mõned pildid on selgitatud…
Mõned pildid on selgitatud…
Mõned pildid on selgitatud…

Suurim pilt on tuntud Mandelbroti komplekt. Sellel pildil kasutatud kompleksarvud on vahemikus -2,1 kuni +0,7 abstsissis ja -1,2 kuni 1,2 ordinaadis. Kui suurendate selle esimese pildi vasakut osa, on tõenäoline, et saate lõpuks teise pildi, mis kuvab originaalkomplekti väiksema versiooni, mis asub komplekti vasakpoolses otsas. Mõlema pildi puhul on astendaja ('n') 2: see on väärtus, mida tavaliselt kasutatakse Mandelbroti komplektide kuvamiseks.

Kui muudate selle väärtuseks 3 (klõpsake lihtsalt klahvi, öeldes 3), saate kolmanda pildi. Üks ilmne erinevus on sümmeetriategur: n = 2 annab aksiaalse sümmeetria (st komplekt on sümmeetriline horisontaaltasandi keskjoone suhtes), kuid n = 3 korral muutub pilt muutumatuks, kui pööratakse 120 ° (üks kolmandik 360 °, pöörlemine) sümmeetriategur 3). Ja see säilitab oma fraktaalsed omadused, mida saate kontrollida musta kuju servi suumides.

Neljas pilt on Julia komplekt, mis on saadud pärast koefitsiendi väärtuse valimist, mis võrdub 0,414 abstsissis ja 0,09 ordinaadis. Valitud on punane palett, nagu on näha paremal asuvast rohelisest klahvist (roheline, olles järgmine värv). Viiendal pildil kuvatakse sama tüüpi Julia komplekt, mis on konstantsi kõrgem kujuteldav osa (0,358).

Loodan, et naudite selle programmiga mängimist ja saate kuvada toredaid fraktaalpilte. Ärge kartke uurida Mandelbroti ja Julia komplekti ning mängida palettidega: need aitavad tuvastada mõningaid detaile, mis lihtsate ühevärviliste puhul ei pruugi olla nähtavad. Võite avastada isegi fraktaalseid maastikke, mida keegi pole enne teid näinud …

_

Kas soovite avastada rohkem fraktaalseid pilte? Lihtsalt klõpsake siin või uurige fraktaalkunsti või isegi ascii fraktaali. Võib -olla tekitab see õpetlik soov luua selliseid suurepäraseid pilte …

Valmistatud matemaatikavõistlusega
Valmistatud matemaatikavõistlusega
Valmistatud matemaatikavõistlusega
Valmistatud matemaatikavõistlusega

Made with Math konkursi teine preemia

Soovitan: