Мазмұны:

Мандельброт пен Джулия ESP32: 4 қадамды орнатады (суреттермен)
Мандельброт пен Джулия ESP32: 4 қадамды орнатады (суреттермен)

Бейне: Мандельброт пен Джулия ESP32: 4 қадамды орнатады (суреттермен)

Бейне: Мандельброт пен Джулия ESP32: 4 қадамды орнатады (суреттермен)
Бейне: Басқа тышты деген осы 😡 2024, Шілде
Anonim
Image
Image
Мандельброт пен Джулия ESP32 -ге қосылады
Мандельброт пен Джулия ESP32 -ге қосылады
Мандельброт пен Джулия ESP32 -ге қосылады
Мандельброт пен Джулия ESP32 -ге қосылады

Сіз, әрине, фракталдарды білесіз, олардың ең атақтысы - Mandelbrot жиынтығы.

Мұнда ESP32 -де ойнауға болатын бағдарлама. Мен ESP32 -ді таңдадым, себебі ол есептеулерді стандартты Arduino -ға қарағанда (сағат жиілігі жоғары: 240 МГц) жылдамырақ жасайды деп есептеймін: есептеу мен көрсету үшін секундтан секундқа дейін.

Код 480 x 320 TFT сенсорлық экранында көрсетіледі. Ол Mandelbrot пен Julia жиынтығын бірнеше параметрлік мәндер үшін есептейді және фракталдық аспектіні (яғни әрбір масштаб өзгерісінде бірдей құрылымдардың болуын) көру үшін қызығушылық аймағын үлкейтуге мүмкіндік береді. Есептеу дәлдігінің шектеулі болуына байланысты масштабтау деңгейі шектеулі, бірақ кескін нашарлағанға дейін жарты ондаған масштабтауға болады.

Фракталдардың сиқырлы әлемін зерттеуге дайын болыңыз …

1 -қадам: Мандельброт пен Джулия жиынтығы дегеніміз не?

Мандельброт пен Джулия жиынтығы дегеніміз не?
Мандельброт пен Джулия жиынтығы дегеніміз не?
Мандельброт пен Джулия жиынтығы дегеніміз не?
Мандельброт пен Джулия жиынтығы дегеніміз не?
Мандельброт пен Джулия жиынтығы дегеніміз не?
Мандельброт пен Джулия жиынтығы дегеніміз не?

Mandelbrot жиынтығы 19 ғасырдың аяғында француз және американдық математик Бенуа Мандельброттың (1924-2010) есімімен аталды, ол 19 ғасырдың соңында Пеано, Сьерпински мен Джулияның бастамасымен басталды.

Фракталдық объектілер дегеніміз не?

Теңіз жағалауының сызығы, бұлттардың пішіні, ағаш тәрізді хаотикалық болып көрінуі мүмкін табиғаттың заңсыздықтары, шын мәнінде, ауқымды өзгеретін өте күрделі геометрияның көрінісі болып табылады. Бұл тұрғыда бөлшек өлшем ұғымы әдеттегі евклидтік өлшемді алмастырады (ол әрқашан бүтін сан)!

Фракталдық объект-оның кез келген бөлігі бүтінге ұқсас (бұл өзін-өзі ұқсастық деп аталады): оның құрылымы масштабтың өзгеруіне байланысты инвариантты.

«Фрактал» термині - 1974 жылы Бенуа Мандельброт латынның fractus тамырынан жасаған неологизм, ол «сынған», «біркелкі емес» дегенді білдіреді. Бұл әрі зат есім, әрі сын есім. Көптеген табиғи құбылыстар - мысалы, жағалау сызықтарының контуры немесе Романеско қырыққабатының пайда болуы (суретті қараңыз) - шамамен фракталдық пішіндері бар.

Бенуа Мандельброттың мансабы біршама атипті болды: Лилль университетінде (Франция) сабақ бергеннен кейін, ол IBM -де қызметке орналасты, ол тез арада IBM стипендиаты болды, бұл оған ғылыми оқуға үлкен еркіндік берді. 1980 жылдардың басында, ол IBM -ден кеткеннен кейін, Гарвардта профессор болды, бірақ Йельде біржола тұрақтады.

Оның 1960-1970 жылдардағы жұмысы оны «Фракталдық объектілер» атты әйгілі мақаланы жариялауға итермеледі, онда ол математикалық қоғамдастықтың үлкен бөлігі жай қызығушылық ретінде қарастыратын бұл объектілер табиғаттың барлық жерінде кездесетінін көрсетті. Ол физика, гидрология, қаржы, метеорология, география, геология, металлургия сияқты көптеген салаларда көптеген мысалдар келтірді.

Mandelbrot жиынтығы дегеніміз не?

Бастау үшін, бұл бағдарлама жасаған жақсы сурет деп айтайық. Және бұл бағдарлама өте қарапайым. Оны жасауға арналған көптеген компьютерлік сызбалар мен көптеген компьютерлік бағдарламалар бар. Ендеше, оның ерекшелігі неде? Біріншіден, Mandelbrot жиынтығы - бұл жоспардың жиынтығы, ұпайлар жинағы. Онда аудандар, сонымен қатар тегіс қисықтар, жіптер, бірнеше тармақтары шығатын нүктелер және басқа заттар бар. Екіншіден: бұл өте қызықты және қызықты тарихы бар.

20 ғасырдың басында француз математиктері Пьер Фату мен Гастон Юлия математиканың голоморфтық динамика деп аталатын қосалқы доменін жасады. Олар қол жетімді қарапайым формулаларды қолдана отырып, сандарға әсер ететін белгілі бір функцияларды қызықтырды. Қарастырылып отырған сандар - бұл нақты сандар мен ойдан шығарылған бөліктер деп аталатын екі координатамен (жазықтықтың нүктелері сияқты) көрсетілген шамалар. Оларды 16 ғасырда математиктер көпмүшелердің түбірлерін және теңдеулерді шешуге көмектесу үшін ойлап тапты, бірақ математика мен физика ғылымдарында кең және терең қосымшаларды тапты. Біз 2 күрделі санды қосуға, көбейтуге немесе бөлуге және басқа да көптеген әрекеттерді жасай аламыз. Фату мен Джулия күрделі сан бірнеше рет қайталанатын қарапайым ережеге сәйкес өзгеретін белгілі бір динамикалық жүйелердің қасиеттерін зерттеді: мұнда күрделі математиканың қажеті жоқ. (сондықтан сіз бірінші суретті ұмыта аласыз …). Олар бұл жүйелердің байлығын ашты, қазір Юлия жиынтығы деп аталатын жиындарды анықтады және олардың бір-біріне ұқсастығын зерттеді, сондықтан фракталдық аспект … бірақ бұл сөз ол кезде болмады, себебі оны кейінірек … Бенуа Мандельброт ойлап тапты!

Құрылтайшылар жұмысынан кейін бұл домен ұмытылды. Компьютерлер келгенде, олар қарқынды есептеулерді қажет ететін көптеген математикалық құбылыстарды зерттеуге көмектесті, соның ішінде Юлия мен Фату ашқан доменді, осылайша, Бенуа Мандельброт 1980 жылдары IBM компьютерлерін холоморфтық динамикаға қатысты белгілі бір математикалық жиынтығын ұсыну үшін шешкен кезде., ол өте тартымды және өте қызықты сурет алды (алдыңғы бөлімнің бірінші суреті).

Mandelbrot жиынтығы нені білдіреді? Негізінде, суреттің әр нүктесімен байланысты негізгі динамикалық жүйе бар. Нүктенің координаттары реттелетін параметр ретінде әрекет етеді. Әр түрлі нүктелер Юлияның әр түрлі жиынтығына сәйкес келеді және олардың мінез -құлқына байланысты біз нүктені ерекше түрде бояуды шеше аламыз. Mandelbrot жиынтығы - бұл жүйенің белгілі бір қасиеті бар параметрлер жиыны.

Мандельброт пен Юлия жиынтығын қалай есептеу керек?

Біз бұл жиындарды қалай есептеу керектігін егжей -тегжейлі білуіміз керек. Mandelbrot және Julia жиындары қарапайым формуланың қайталанған қайталануымен есептеледі, біздің жағдайда z^n+c. z - дисплейдегі нүктенің координаттарын білдіретін күрделі сан. бүтін сан көрсеткіші болып табылады, сондықтан z^n өзіне z есе көбейтіндісіне тең, ал с - тұрақты.

Mandelbrot жиынтығы үшін, дисплей аймағындағы барлық нүктелер үшін z -ны 0 -ге инициализациялаймыз. C тұрақтысы қарастырылған нүктенің координаттарының мәніне тең қабылданады және формула қайталанады.

Міне ереже: нүкте жиынның бөлігі болып табылады, егер бұл формуланы қайталап қолдану алшақтамаса (яғни үлкен сандарға есептеуге әкелмесе). Егер формуланың нәтижесі 2 -ден асатын болса (модуль бойынша, егер біз күрделі сандар туралы айтатын болсақ), итерация алшақ болатынын математикалық түрде көрсетуге болады. Жақсы түстерді тез алу үшін, нәтиже модулі 2 -ден асқанда және түс сол қайталану санына сәйкес болғанда, біз қайталауды тоқтатамыз. Егер қайталану саны тым үлкен болып кетсе (егер нүкте Mandelbrot жиынтығының бөлігі болса), біз берілген шегінен кейін тоқтап, қара түсті осы нүктеге байланыстырамыз.

Юлия жиынтығы да осылай есептеледі, бірақ есептеулер 0 -де инициализацияланбайды, бірақ қарастырылатын нүктенің координаталары бойынша және с тұрақтысын пайдаланушы таңдайды және бүкіл кескін үшін өзгеріссіз қалады.

Міне, түсінікті деп үміттенемін … Бұл түсініктемелер қолдану жөніндегі нұсқаулықтың қалған бөлігін жақсы түсінуге көмектеседі.

2 -қадам: Сізге не қажет?

Саған не қажет?
Саған не қажет?
Саған не қажет?
Саған не қажет?
Саған не қажет?
Саған не қажет?
Саған не қажет?
Саған не қажет?

Материалдық есеп:

  • 1 ESP32 тақтасы
  • Сенсорлы экраны мен қаламы бар 1 TFT дисплейі
  • 1 нан тақтасы мен сымдар

Міне бітті. Жалпы құны 10 доллардан төмен.

Espressif ESP32 - бұл 240 МГц жиілігінде жұмыс істейтін екі ядролы микроконтроллер, бұл оны жылдам және күрделі қайталанатын есептеуге жақсы үміткер етеді. Оның WiFi мен Bluetooth мүмкіндіктері бар, оны мен бұл жобада қолданбаймын.

Нұсқаулықтар жиынтығының көлемі 32 бит. 16 және 32 биттік айнымалылармен есептеу өте жылдам, бұл масштабтау үшін маңызды болып табылатын дәл есептеулерге мүмкіндік береді. Бұл қосымшада 320 x 240 дисплей үшін кескін шамамен 75 000 пиксельден тұрады, олардың әрқайсысы 100 ретке дейін орындалатын қайталанатын процесс көмегімен есептеледі. Бұл әрқайсысы экспонентация, яғни бірнеше көбейту болып табылатын 7, 500, 000 бірлік есептеулерге әкелуі мүмкін …

Бұл жерде есептеу жылдамдығы өте маңызды, бірақ дәлдік маңызды. Масштабты көбейткен сайын, көрсетілетін бөліктің бөлігі кішірек болады. Бұл суреттің 320 x 240 пиксельдерінің әрқайсысы көршілеріне өте жақын санды білдіреді. Масштаб ұлғайған сайын бұл жақындық артады.

Бірақ фрактальды суреттердің бұл қасиеті бар, олар масштабта өзгеріссіз қалады. Ұсақ бөлшектер барлық жерде және кез келген масштабтау факторы үшін пайда болады. Mandelbrot жиынтығының негізгі формасы, жоғарыдағы суретте көрсетілгендей, басқа жерден әлдеқайда кіші нұсқада табылуы мүмкін және егер сіз масштабты жеткілікті жақындатсаңыз, көрсетіледі (бейнені қараңыз). Бірақ егер көршілес екі пиксель арасындағы координаталық айырмашылық ESP32 -дің мінез -құлқындағы айырмашылықты анықтауға мүмкіндік бермейтін болса, дәлдіктің болмауына байланысты фракталдық эффект көрсетілмейді …

Жақсы дәлдікке қол жеткізу үшін код ESP32 32 битпен кодталған қалтқыларды қолданады. Бұл 6 немесе 7 масштабтауға дейін мүмкіндік береді. Қос дәлдікті (64 биттік) қолдану бұл масштабтау тереңдігін, баяу есептеулер есебінен, 2 суреттің арасындағы уақытты ұзартады.

Екі есе дәл болу үшін кодтағы «float» барлық қайталануын «қос» етіп өзгертіп, кодты іске қосыңыз. Мен жақында үлкен дисплейге арналған нұсқаны жасадым (HVGA 480 x 320 пиксель): 16 бит өзгермелі суретті көрсету үшін 3 секунд қажет, ал қосарлау 10-20 секундқа созылады (3 -тен 6 есе ұзағырақ), бірақ 15 -тен астам масштабтау деңгейін қолдайды.. Осы тараудың үшінші суреті Mandelbrot жиынтығының оң жақ бөлігіндегі 14 масштабтау деңгейін көрсетеді.

Дисплейді қалай қосуға болады:

Мен SPI дисплейін қолдандым, ал параметрлер User_Setup.h файлында (TFT_eSPI кітапхана қалтасында) орнатылады:

  • Драйвер: дисплейге сәйкес келетін драйверді түсіндірмеңіз. Менікі #define RPI_ILI9486_DRIVER болды
  • PIN нөмірлері: файлдың ESP32 бөліміне өтіп, таңдаңыз

    • #анықтау TFT_MISO 19
    • #TFT_MOSI анықтаңыз
    • #TFT_SCLK 18 анықтаңыз
    • #define TFT_CS 15 // Чипті таңдау түйреуіші
    • #define TFT_DC 2 // Деректер пәрменін басқару түйреуі
    • #define TFT_RST 4 // PIN кодын қалпына келтіру (RST түйреуішіне қосылуы мүмкін)
    • #deuine TOUCH_CS 22 // Сенсорлы экранның чипін таңдау түйіні (T_CS)
  • Қаріптер: оларды өзгертудің қажеті жоқ
  • Басқа опциялар: Мен төмендегілерді таңдадым

    • #SPI_FREQUENCY 20000000 анықтаңыз
    • #SPI_READ_FREQUENCY 20000000 анықтаңыз
    • #SPI_TOUCH_FREQUENCY 2500000 анықтаңыз

Файлдың барлық басқа жолдары түсіндірілген.

Дисплейдің сенсорлық сыйымдылығын калибрлеңіз

Егер экран бөлігін немесе түймені таңдау дәл болмаса, тіпті мүлде қате болса, TFT_eSPI кітапханасынан сенсорлық калибрлеу эскизін іске қосыңыз және берілген массивке кодқа көшіріңіз / қойыңыз (дисплей бағдары үшін дұрыс мәнді пайдалануды ұмытпаңыз)., Ландшафт үшін 1 немесе 3).

3 -қадам: ESP32 бағдарламасы

ESP32 бағдарламасы
ESP32 бағдарламасы
ESP32 бағдарламасы
ESP32 бағдарламасы
ESP32 бағдарламасы
ESP32 бағдарламасы

Код 320 x 240 TFT сенсорлық экранында көрсетіледі және TFT_eSPI кітапханасын қолданады. Ол Mandelbrot пен Julia жиынтығын бірнеше экспоненциалды мәндер үшін есептейді және фракталдық аспектіні (яғни әрбір масштаб өзгерісінде бірдей құрылымдардың болуын) көру үшін қызығушылық аймағын үлкейтуге мүмкіндік береді.

Қосылған код 480 x 320 дисплейге арналған нұсқа болып табылады. Бұл нұсқада дисплейдің өлшемін (ені мен биіктігін пиксельмен) өзгертуге болады. TFT_eSPI кітапханасы қосылымдарды баптау файлындағы (қоса берілген) анықтайды, оны кітапхана каталогына қою керек.

Код жұмыс нұсқаулығын көрсетуден басталады (суретті және бейнені қараңыз)

Экранның көп бөлігі суреттерді көрсетуге арналған, сенсорлық түймелер экранның оң жағында орналасқан:

  • R: «қалпына келтіруді» орындайды, яғни. д. суретті максималды масштабта көрсетеді,
  • U: «қайтару» алдыңғы қадамға оралуға мүмкіндік береді (егер масштабталған аймақ қызықты болмаса, үлкейту үшін суреттің басқа бөлігін таңдауға болады),
  • M немесе J: Mandelbrot жиынтығынан Юлия жиынтығына ауысуға мүмкіндік береді және керісінше.

Кейбір пернелердің белгілері контекстке байланысты өзгереді: олар басылғанда орындалатын функцияны көрсетеді. Егер сіз қазіргі уақытта Mandelbrot жиынтығын көрсетсеңіз, M/J пернесі J көрсетеді, себебі оны бассаңыз, сіз Юлия жиынтығын көрсетесіз (және керісінше).

Түс палитрасын таңдауға да қатысты. Біз жасыл палитрадан бастаймыз. Кілт келесі палитраны ұсынады (көк). Бояғыштар: қызыл, жасыл, көк, сұр, палитра 1, палитра 2 және қызылға қарай. Соңғы екеуі - контрастты қамтамасыз ететін түрлі -түсті паллет сынақтары, бұл кейбір бөлшектерді жақсы көруге мүмкіндік береді.

Нөмірі бар кілт 2 -ден 7 -ге дейінгі циклде n экспонентін таңдауға мүмкіндік береді (және кері 2 -ге дейін). Дәл сол рухта, егер сіз қазір 2 -де болсаңыз, ол 3 көрсетеді:

Соңында, Юлия жиынтығын көрсеткенде, с тұрақтысының мәнін таңдау қажет: С пернесі селектордың арқасында мұны жасауға мүмкіндік береді (екінші суретті қараңыз). Бұл тұрақты мән мәнмен бірге көрсетіледі.

Кескінді нұқу таңдалған нүктені айналдырады. Түйілген нүктеде шағын шеңбер көрсетіледі және тіктөртбұрыш жиынның үлкейтілген аймағын ерекшелейді.

3 -ші суретте есептеу уақыты 320 х 240 пиксель үшін 0,8 мен 1,2 секунд аралығында қалатынын көрсетеді, бұл масштабтау мен көрсетуге ыңғайлы етеді. Ол 480 x 320 пиксель үшін 3 секундқа жетеді, бірақ қосымша мәліметтер береді.

4 -қадам: Кейбір суреттер түсіндірілген…

Кейбір суреттер түсіндірілген…
Кейбір суреттер түсіндірілген…
Кейбір суреттер түсіндірілген…
Кейбір суреттер түсіндірілген…
Кейбір суреттер түсіндірілген…
Кейбір суреттер түсіндірілген…

Ең үлкен сурет - бұл белгілі Mandelbrot жиынтығы. Бұл суретте қолданылатын комплексті сандар абсциссада -2.1 -ден +0.7 -ге дейін, ал ординатта -1.2 -ден 1.2 -ге дейін. Егер сіз осы бірінші кескіннің сол жақ бөлігін үлкейтсеңіз, ақырында сіз екінші суретті аласыз, ол жиынтықтың сол жақ шетінде орналасқан бастапқы жиынтықтың кішірек нұсқасын көрсетеді. Бұл екі кескін үшін де экспонент ('n') 2 -ге тең: бұл әдетте Mandelbrot жиындарын көрсету үшін қолданылатын мән.

Егер сіз бұл мәнді 3 -ке өзгертсеңіз (3 деген сөзді басыңыз), сіз үшінші кескінді аласыз. Бір айқын айырмашылық - симметрия коэффициенті: n = 2 осьтік симметрияны береді (яғни жиынтық медианалық горизонталь осіне қарсы симметриялы), бірақ n = 3 кезінде сурет 120 ° бұрылу арқылы инвариантты болады (360 ° үштен бірі, айналу) симметрия коэффициенті 3) Және ол қара форманың шеттерін ұлғайту арқылы тексеруге болатын фракталдық қасиеттерін сақтайды.

4 -сурет - абсциссада 0,414 және ординатта 0,09 коэффициентінің мәнін таңдағаннан кейін алынған Юлия жиынтығы. Қызыл палитра таңдалады, оны оң жақтағы жасыл пернен көруге болады (жасыл, келесі түс). Бесінші суретте Юлия жиынтығының бір түрі бейнеленген, ол константаның (0,358) жоғары қиялды бөлігі.

Сізге бұл бағдарламамен ойнау ұнайтынына сенімдімін және сіз жақсы фракталдық суреттерді көрсете аласыз деп үміттенемін. Mandelbrot пен Julia жиынтығын зерттеуден тартынбаңыз және бояғыштармен ойнаңыз: олар қарапайым монохромды көрінбейтін кейбір бөлшектерді анықтауға көмектеседі. Сіз тіпті сізден бұрын ешкім көрмеген кейбір фракталдық пейзаждарды таба аласыз …

_

Тағы да фракталдық бейнелерді тапқыңыз келе ме? Мұнда басыңыз немесе фракталдық өнерді немесе тіпті асции фракталын зерттеңіз. Мүмкін, бұл нұсқаулық сізге керемет суреттер жасауға талпындырады …

Математика сайысынан жасалған
Математика сайысынан жасалған
Математика сайысынан жасалған
Математика сайысынан жасалған

«Математикамен жасалған» байқауының екінші жүлдесі

Ұсынылған: