Orodha ya maudhui:

Mandelbrot na seti za Julia kwenye ESP32: Hatua 4 (na Picha)
Mandelbrot na seti za Julia kwenye ESP32: Hatua 4 (na Picha)

Video: Mandelbrot na seti za Julia kwenye ESP32: Hatua 4 (na Picha)

Video: Mandelbrot na seti za Julia kwenye ESP32: Hatua 4 (na Picha)
Video: VR Kidzz 360 Аргентинская девушка, которая любит футбол 2024, Julai
Anonim
Image
Image
Mandelbrot na seti za Julia kwenye ESP32
Mandelbrot na seti za Julia kwenye ESP32
Mandelbrot na seti za Julia kwenye ESP32
Mandelbrot na seti za Julia kwenye ESP32

Kwa kweli unajua fractals, maarufu zaidi ambayo ni seti ya Mandelbrot.

Hapa kuna programu ya kucheza na kwenye ESP32. Nilichagua ESP32 kwa sababu nadhani itafanya mahesabu haraka kuliko Arduino ya kawaida (masafa ya saa ya juu: 240 MHz): karibu sekunde moja hadi pili na nusu kwa hesabu na onyesho.

Maonyesho ya nambari kwenye skrini ya kugusa ya 480 x 320 TFT. Inahesabu Mandelbrot na Julia huweka kwa maadili kadhaa ya parameter, na hukuruhusu kuvuta maeneo ya kupendeza ili kuona sehemu ya kupasuka (i.e. uwepo wa miundo sawa katika kila badiliko la kiwango). Kiwango cha kuvuta ni mdogo kwa sababu ya usahihi mdogo wa mahesabu, lakini nusu ya zoom kadhaa zinaweza kufanywa kabla ya picha kuharibika.

Jitayarishe kuchunguza ulimwengu wa uchawi wa kizazi …

Hatua ya 1: Je! Mandelbrot na seti za Julia ni nini?

Je! Mandelbrot na seti za Julia ni nini?
Je! Mandelbrot na seti za Julia ni nini?
Je! Mandelbrot na seti za Julia ni nini?
Je! Mandelbrot na seti za Julia ni nini?
Je! Mandelbrot na seti za Julia ni nini?
Je! Mandelbrot na seti za Julia ni nini?

Seti ya Mandelbrot imepewa jina la Benoit Mandelbrot (1924-2010), mtaalam wa hesabu wa Ufaransa na Amerika ambaye alifanya kazi ya ujasusi katika jiometri ya fractal, iliyoanzishwa mwishoni mwa karne ya 19 na, kati ya wengine, Peano, Sierpinski na Julia.

Je! Vitu vya Fractal ni nini?

Ukiukwaji wa maumbile, ambayo inaweza kuonekana kuwa ya machafuko, kama mstari wa pwani ya bahari, umbo la mawingu, mti, kwa kweli ni usemi wa jiometri ngumu sana kwa kubadilika kwa kiwango. Katika muktadha huu, wazo la mwelekeo wa sehemu hubadilisha ile ya kawaida ya Euclidean (ambayo kila wakati ni nambari)!

Kitu kilichovunjika ni kwamba sehemu yoyote yake inafanana na yote (hii inaitwa kufanana kwa kibinafsi): muundo wake hauwezi kubadilika kwa mabadiliko ya kiwango.

Neno "fractal" ni neologism iliyoundwa na Benoît Mandelbrot mnamo 1974 kutoka kwa mizizi ya Kilatini fractus, ambayo inamaanisha "kuvunjika", "isiyo ya kawaida". Wote ni nomino na kivumishi. Matukio mengi ya asili - kama muhtasari wa ukanda wa pwani au kuonekana kwa kabichi ya Romanesco (angalia picha) - zina maumbo takriban ya sehemu.

Benoît Mandelbrot's alikuwa na kazi ya kupendeza: baada ya kufundisha katika Chuo Kikuu cha Lille (Ufaransa), alichukua nafasi huko IBM ambapo kwa haraka akawa Mshirika wa IBM, ambayo ilimpa uhuru mkubwa kwa masomo yake ya kisayansi. Mwanzoni mwa miaka ya 1980, baada ya kuondoka IBM, alikua profesa huko Harvard, lakini akakaa kabisa huko Yale.

Kazi yake katika miaka ya 1960 na mwanzoni mwa miaka ya 1970 ilimwongoza kuchapisha nakala maarufu inayoitwa "Fractal Objects" ambayo alionyesha kwamba vitu hivi, vilivyozingatiwa na sehemu kubwa ya jamii ya kihesabu kama udadisi tu, zilipatikana kila mahali katika maumbile. Alitoa mifano mingi katika anuwai anuwai kama fizikia, hydrolojia, fedha, hali ya hewa, jiografia, jiolojia, metali ….

Seti ya Mandelbrot ni nini?

Kuanza, wacha tuseme kwamba ni kuchora nzuri inayotokana na programu. Na mpango huu ni rahisi sana. Kuna michoro nyingi zinazozalishwa na kompyuta na programu nyingi za kompyuta kuzizalisha. Kwa hivyo ni nini maalum juu ya huyu? Kwanza, seti ya Mandelbrot ni sehemu ndogo ya mpango, mkusanyiko wa alama. Inayo maeneo lakini pia ina laini laini, nyuzi, vidokezo ambavyo matawi mengi hutoka, na vitu vingine. Pili: inavutia sana na ina historia ya kupendeza sana.

Mwanzoni mwa karne ya 20, wataalam wa hesabu wa Ufaransa Pierre Fatou na Gaston Julia walitengeneza uwanja mdogo wa hesabu uitwao mienendo ya holomorphic. Walipendezwa na kazi fulani, wakifanya kwa nambari, wakitumia fomula rahisi zaidi zinazopatikana. Nambari zinazozungumziwa ni nambari ngumu, idadi inayowakilishwa na kuratibu mbili (kama alama za ndege) inayoitwa sehemu halisi na za kufikiria. Walibuniwa katika karne ya 16 na wanahisabati kusaidia kupata mizizi ya polynomials na suluhisho la equations lakini wamepata matumizi mapana na ya kina katika hisabati na sayansi ya mwili. Tunaweza kuongeza nambari 2 ngumu, kuzidisha au kugawanya, na kufanya vitu vingine vingi. Fatou na Julia walisoma mali ya mifumo fulani ya nguvu ambapo idadi tata hutofautiana kulingana na sheria rahisi inayorudiwa mara kwa mara: hakuna haja ya hesabu ngumu hapa (kwa hivyo, unaweza kusahau picha ya kwanza…). Walifunua utajiri wa mifumo hii, wakafafanua seti zinazoitwa sasa seti za Julia, na kusoma kufanana kwao, kwa hivyo sura ya kifupi… lakini neno hilo halikuwepo wakati huo kwa sababu lilibuniwa baadaye tu, na… Benoît Mandelbrot!

Baada ya kazi ya waanzilishi, kikoa hiki kilighairiwa. Wakati kompyuta zilifika, zilisaidia kuchunguza hali nyingi za kihesabu ambazo zinahitaji kompyuta kubwa, pamoja na kikoa kilichofunguliwa na Julia na Fatou., alipata mchoro wa kuvutia sana na wa kuvutia sana (picha ya kwanza ya sehemu iliyopita).

Seti ya Mandelbrot inawakilisha nini? Kimsingi, kuna mfumo wa nguvu unaohusishwa na kila hatua ya picha. Uratibu wa hatua hufanya kama kigezo kinachoweza kubadilishwa. Pointi tofauti zinahusiana na seti tofauti za Julia na kulingana na tabia zao, tunaweza kuamua kupaka rangi kwa njia fulani. Seti ya Mandelbrot ni seti ya vigezo ambavyo mfumo una mali fulani.

Jinsi ya kuhesabu seti za Mandelbrot na Julia?

Tunahitaji kwenda kwa undani zaidi juu ya jinsi ya kuhesabu seti hizi. Seti za Mandelbrot na Julia zinahesabiwa na kurudia tena kwa fomula rahisi, kwa upande wetu z ^ n + c. z ni nambari tata ambayo inawakilisha kuratibu za uhakika kwenye onyesho. ni kielelezo kamili, kwa hivyo z ^ n ni sawa na z kuzidishwa na yenyewe mara n, na c ni mara kwa mara.

Kwa seti ya Mandelbrot, kwa alama zote kwenye eneo la onyesho, tunaanzisha z hadi 0. Mara kwa mara c inachukuliwa sawa na thamani ya uratibu wa hatua iliyozingatiwa na fomula hiyo inaangaziwa.

Hapa kuna kanuni: uhakika ni sehemu ya seti ikiwa matumizi ya mara kwa mara ya fomula hii hayatofautiani (i.e. hayasababisha hesabu kuelekea idadi kubwa). Inaweza kuonyeshwa kwa hesabu kwamba ikiwa matokeo ya fomula yanazidi 2 (kwa moduli kwani tunazungumza juu ya nambari ngumu) upunguzaji utatofautiana. Kwa hivyo kupata haraka rangi nzuri, tunasimamisha iteration wakati moduli ya matokeo inazidi 2 na rangi inalingana na idadi ya iteration fulani. Ikiwa idadi ya kurudia inakuwa kubwa sana (kwa hivyo ikiwa nukta ni sehemu ya seti ya Mandelbrot) tunaacha baada ya kizingiti fulani na kuhusisha rangi nyeusi hadi hapa.

Seti ya Julia imehesabiwa kwa njia ile ile lakini hesabu hazijaanzishwa kwa 0 lakini kwa thamani ya uratibu wa hatua iliyozingatiwa na mara kwa mara c huchaguliwa na mtumiaji na inabaki sawa kwa picha nzima.

Hiyo ni hivyo, natumai ni wazi… Maelezo haya husaidia kuelewa vyema maagizo mengine ya matumizi.

Hatua ya 2: Unahitaji Nini?

Unahitaji nini?
Unahitaji nini?
Unahitaji nini?
Unahitaji nini?
Unahitaji nini?
Unahitaji nini?
Unahitaji nini?
Unahitaji nini?

Muswada wa nyenzo:

  • Bodi 1 ya ESP32
  • Onyesho 1 la TFT na skrini ya kugusa na stylus
  • 1 mkate na waya

Hiyo ndio. Jumla ya gharama chini ya 10 USD.

Espressif ya ESP32 ni microcontroler mbili ya msingi inayoendesha 240 MHz, ambayo inafanya kuwa mgombea mzuri wa kompyuta ya haraka na ngumu ya kurudia. Inayo uwezo wa WiFi na Bluetooth ambayo situmii katika mradi huu.

Seti ya mafundisho ina ukubwa wa bits 32. Kuhesabu na vigeugeu 16 na 32 ni haraka sana ambayo huwezesha hesabu sahihi, ambayo ni msingi kwa kusudi la kukuza. Katika programu hii, kwa onyesho la 320 x 240, picha imeundwa kwa saizi 75, 000, ambayo kila moja imehesabiwa kwa kutumia mchakato wa kurudia ambao unaweza kukimbia hadi mara 100. Hii inaweza kusababisha mahesabu 7, 500, 000 ya umoja, ambayo kila moja ni ufafanuzi, kwa mfano kuzidisha kadhaa…

Kwa hivyo kasi ya hesabu ni muhimu hapa, lakini usahihi ni msingi. Kadri unavyozidi kukuza, ndivyo ukubwa wa sehemu ya seti unavyoonekana kuwa ndogo. Hii inamaanisha kuwa kila saizi ya 320 x 240 ya picha hiyo inawakilisha nambari iliyo karibu sana na majirani zake. Wakati zoom inavyoongezeka, ukaribu huu unaongezeka.

Lakini picha za fractal zina mali hii ambayo hubadilika bila kubadilika. Maelezo madogo yanaonekana kila mahali na kwa sababu yoyote ya kuongeza. Sura kuu ya seti ya Mandelbrot, kama inavyoonekana kwenye onyesho kwenye picha hapo juu, inaweza kupatikana mahali pengine katika toleo dogo zaidi, na kuonyeshwa ikiwa unakaribia karibu (tazama kwenye video). Lakini ikiwa tofauti ya uratibu kati ya saizi mbili za jirani ni ndogo sana kuwezesha ESP32 kupata tofauti zao katika tabia, kwa sababu ya ukosefu wa usahihi, athari ya fractal haiwezi kuonyeshwa…

Ili kupata usahihi mzuri, nambari hutumia kuelea, ambayo imeorodheshwa kwa bits 32 na ESP32. Hii inawezesha hadi ngazi 6 au 7 za kukuza. Kutumia usahihi mara mbili (biti 64) kungeongeza kina hiki cha kukuza, kwa gharama ya hesabu polepole, kwa hivyo nyakati ndefu kati ya picha mbili.

Ili kuifanya iwe sawa mara mbili, badilisha tu matukio yote ya "kuelea" kuwa "maradufu" katika nambari na uendeshe nambari hiyo. Hivi majuzi nilitengeneza toleo la onyesho kubwa zaidi (saizi za HVGA 480 x 320): biti 16 huelea huchukua sekunde 3 kuonyesha picha, na mara mbili huchukua kati ya sekunde 10 na 20 (mara 3 hadi 6 kwa muda mrefu) lakini inasaidia zaidi ya viwango vya kukuza 15. Picha ya tatu katika sura hii inaonyesha kiwango cha zoom 14 katika sehemu ya kulia zaidi ya seti ya Mandelbrot.

Jinsi ya kuunganisha onyesho:

Nilitumia onyesho la SPI, na vigezo vimewekwa kwenye faili ya Mtumiaji_Setup.h (kwenye folda ya maktaba ya TFT_eSPI):

  • Dereva: toa dereva sahihi kwa onyesho lako. Yangu ilikuwa #fafanua RPI_ILI9486_DRIVER
  • Nambari za siri: nenda kwenye sehemu ya faili ya ESP32 na uchague

    • #fafanua TFT_MISO 19
    • #fafanua TFT_MOSI 23
    • #fafanua TFT_SCLK 18
    • #fafanua TFT_CS 15 // Chip chagua pini ya kudhibiti
    • #fafanua TFT_DC 2 // Pini ya kudhibiti Amri ya Takwimu
    • #fafanua TFT_RST 4 // Rudisha pini (inaweza kuungana na pini ya RST)
    • #fafanua TOUCH_CS 22 // Pini ya kuchagua Chip (T_CS) ya skrini ya kugusa
  • Fonti: hakuna haja ya kuzibadilisha
  • Chaguzi zingine: Nilichagua zifuatazo

    • #fafanua SPI_FREQUENCY 20000000
    • #fafanua SPI_READ_FREQUENCY 20000000
    • #fafanua SPI_TOUCH_FREQUENCY 2500000

Mistari mingine yote ya faili imetolewa maoni.

Sanidi uwezo wa kugusa wa onyesho

Ikiwa uteuzi wa sehemu ya skrini au kitufe si sahihi, au hata sio sawa kabisa, tumia mchoro wa upimaji wa kugusa kutoka kwa maktaba ya TFT_eSPI na unakili / ubandike kwenye nambari ambayo inapeana (hakikisha utumie thamani sahihi kwa mwelekeo wa onyesho, 1 au 3 kwa mazingira).

Hatua ya 3: Programu ya ESP32

Programu ya ESP32
Programu ya ESP32
Programu ya ESP32
Programu ya ESP32
Programu ya ESP32
Programu ya ESP32

Msimbo huonyeshwa kwenye skrini ya kugusa ya 320 x 240 TFT, na hutumia maktaba ya TFT_eSPI. Inakadiri Mandelbrot na Julia huweka kwa maadili kadhaa ya kutofautisha, na hukuruhusu kuvuta maeneo ya kupendeza ili kuona sehemu ya kupasuka (i.e. uwepo wa miundo sawa katika kila badiliko la kiwango).

Nambari iliyoambatanishwa ni toleo la onyesho la 480 x 320. Katika toleo hili, unaweza kubadilisha saizi (upana na urefu katika saizi) za onyesho. Maktaba ya TFT_eSPI inafafanua viunganisho kwenye faili ya usanidi (iliyowekwa) ambayo lazima iwekwe kwenye saraka ya maktaba.

Nambari huanza na kuonyesha maagizo ya uendeshaji (angalia picha na video)

Skrini nyingi imehifadhiwa kwa kuonyesha picha, vifungo vya kugusa vinapatikana upande wa kulia wa skrini:

  • R: hufanya "kuweka upya", i. e. huonyesha picha kwa kiwango chake cha juu,
  • U: "tengua" hukuruhusu kurudi kwenye hatua ya awali (ikiwa eneo la kuvuta sio la kupendeza, unaweza kuchagua sehemu nyingine ya picha ili kuvuta),
  • M au J: hukuruhusu kubadili kutoka kwa seti ya Mandelbrot kwenda kwa seti ya Julia na kinyume chake.

Lebo za funguo zingine hubadilika kulingana na muktadha: zinaonyesha kazi ambayo itatekelezwa ikiwa imesisitizwa. Kwa hivyo ikiwa kwa sasa unaonyesha seti ya Mandelbrot, kitufe cha M / J kinaonyesha J kwani ukibonyeza utaonyesha seti ya Julia (na kinyume chake).

Hiyo inatumika kwa uchaguzi wa rangi ya rangi. Tunaanza na palette ya kijani kibichi. Kitufe kinapendekeza palette inayofuata (ile ya samawati). Pale hizo ni: nyekundu, kijani kibichi, hudhurungi, kijivu, palette 1, palette 2 na kurudi nyekundu. Hizi mbili za mwisho ni vipimo vya rangi ya rangi ambayo hutoa tofauti zaidi, ikiruhusu kuona vizuri maelezo kadhaa.

Kitufe na nambari hukuruhusu kuchagua kionyeshi n, kwa kitanzi kutoka 2 hadi 7 (na kurudi hadi 2). Katika roho hiyo hiyo, inaonyesha 3 ikiwa uko 2 sasa …

Mwishowe, wakati wa kuonyesha seti ya Julia, inahitajika kuchagua dhamana ya kila wakati c: kitufe cha C kinakuruhusu kufanya hivyo, shukrani kwa kiteuaji (angalia picha ya pili). Thamani ya kila wakati inaonyeshwa na seti.

Kubofya kwenye zoom za picha karibu na hatua iliyochaguliwa. Mduara mdogo huonyeshwa kwenye sehemu iliyoguswa na mstatili unaangazia eneo lililowekewa la seti.

Picha ya 3 inaonyesha kuwa nyakati za kompyuta zinabaki kati ya sekunde 0.8 na 1.2 kwa saizi 320 x 240, ambazo hufanya iwe vizuri kukuza na kuonyesha. Inafikia sekunde 3 kwa saizi 480 x 320, lakini hutoa maelezo zaidi.

Hatua ya 4: Picha zingine zimefafanuliwa…

Picha zingine Zimefafanuliwa…
Picha zingine Zimefafanuliwa…
Picha zingine Zimefafanuliwa…
Picha zingine Zimefafanuliwa…
Picha zingine Zimefafanuliwa…
Picha zingine Zimefafanuliwa…

Picha kubwa ni seti inayojulikana ya Mandelbrot. Nambari ngumu zinazotumiwa kwenye picha hii ni kutoka -2.1 hadi +0.7 katika abscissa, na -1.2 hadi 1.2 kwa upangishaji. Ikiwa utavuta sehemu ya kushoto kabisa ya picha hii ya kwanza, kuna uwezekano wa kupata ya pili, ambayo inaonyesha toleo dogo la seti ya asili inayopatikana kwenye ncha ya kushoto zaidi ya seti. Kwa picha hizi mbili, kionyeshi ('n') ni sawa na 2: hiyo ndio thamani inayotumika kuonyesha seti za Mandelbrot.

Ukibadilisha thamani hii kuwa 3 (bonyeza tu kwenye kitufe cha kusema 3), unapata picha ya tatu. Tofauti moja dhahiri ni sababu ya ulinganifu: n = 2 inatoa ulinganifu wa axial (yaani seti ni ya ulinganifu dhidi ya mhimili usawa wa wastani), lakini na n = 3 picha inakuwa isiyobadilika kwa kuzunguka kwa 120 ° (theluthi moja ya 360 °, mzunguko ulinganifu sababu ya 3). Na inahifadhi mali zake, ambazo unaweza kudhibitisha kwa kuvuta kando kando ya sura nyeusi.

Picha ya 4 ni seti ya Julia iliyopatikana baada ya kuchagua mgawo sawa sawa na 0.414 katika abscissa na 0.09 kwa upangiaji. Palette nyekundu imechaguliwa, kama inavyoweza kuonekana na kitufe cha kijani kulia (kijani kibichi, kuwa rangi inayofuata itakayochaguliwa). Picha ya tano inaonyesha aina ile ile ya seti ya Julia, ambayo ni sehemu ya juu ya kufikiria ya mara kwa mara (0.358).

Natumai utafurahiya kucheza na programu hii na kwamba utaweza kuonyesha picha nzuri za Fractal. Usisite kuchunguza seti za Mandelbrot na Julia, na ucheze na palettes: husaidia kutambua maelezo kadhaa ambayo hayawezi kuonekana na zile rahisi za monochrome. Unaweza hata kugundua mandhari ya sehemu ambayo hakuna mtu aliyewahi kuona kabla yako…

_

Unataka kugundua picha zaidi za kifafa? Bonyeza tu hapa au chunguza sanaa ya fractal au hata ascii fractal. Labda hii inayoweza kufundishwa itakufanya utake kuunda picha nzuri kama hizo…

Imetengenezwa na Mashindano ya Math
Imetengenezwa na Mashindano ya Math
Imetengenezwa na Mashindano ya Math
Imetengenezwa na Mashindano ya Math

Zawadi ya Pili katika Shindano la Math

Ilipendekeza: