Съдържание:

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

Видео: Манделброт и Джулия комплекти на ESP32: 4 стъпки (със снимки)

Видео: Манделброт и Джулия комплекти на ESP32: 4 стъпки (със снимки)
Видео: № 133 Еженедельный обзор № 35 – Новые продукты для производителей 2024, Юли
Anonim
Image
Image
Манделброт и Джулия на ESP32
Манделброт и Джулия на ESP32
Манделброт и Джулия на ESP32
Манделброт и Джулия на ESP32

Със сигурност знаете фрактали, най -известният от които е наборът на Манделброт.

Ето програма за игра с ESP32. Избрах ESP32, защото мисля, че ще направи изчисленията по -бързо от стандартния Arduino (по -висока тактова честота: 240 MHz): около секунда до секунда и половина за изчисление и показване.

Кодът се показва на 480 x 320 TFT сензорен екран. Той изчислява наборите на Mandelbrot и Julia за няколко стойности на параметри и ви позволява да увеличавате областите, които представляват интерес, за да видите фракталния аспект (т.е. наличието на едни и същи структури при всяка промяна на мащаба). Нивото на мащабиране е ограничено поради ограничената точност на изчисленията, но могат да бъдат направени половин дузина мащаби, преди изображението да се влоши.

Пригответе се да изследвате вълшебния свят на фракталите …

Стъпка 1: Какво представляват комплектите Mandelbrot и Julia?

Какво представляват комплектите Mandelbrot и Julia?
Какво представляват комплектите Mandelbrot и Julia?
Какво представляват комплектите Mandelbrot и Julia?
Какво представляват комплектите Mandelbrot и Julia?
Какво представляват комплектите Mandelbrot и Julia?
Какво представляват комплектите Mandelbrot и Julia?

Комплектът Манделброт е кръстен на Беноа Манделброт (1924-2010), френски и американски математик, който е извършил пионерска работа във фракталната геометрия, инициирана в края на 19 век между други, Peano, Sierpinski и Julia.

Какво представляват фракталните обекти?

Нередностите в природата, които могат да изглеждат хаотични, като линията на морския бряг, формата на облаци, дърво, всъщност са израз на много сложна геометрия в променящ се мащаб. В този контекст понятието дробно измерение замества това на обичайното евклидово измерение (което винаги е цяло число)!

Фрактален обект е такъв, че всяка част от него е идентична с цялото (това се нарича самоподобство): неговата структура е инвариантна от промяна на мащаба.

Терминът "фрактал" е неологизъм, създаден от Беноа Манделброт през 1974 г. от латинския корен fractus, което означава "счупен", "неправилен". Това е едновременно съществително и прилагателно. Много природни явления - като очертанията на бреговата линия или появата на зеле от Романеско (виж снимката) - имат приблизителни фрактални форми.

Беноа Манделброт има донякъде нетипична кариера: след като преподава в Университета в Лил (Франция), той заема позиция в IBM, където бързо става стипендиант на IBM, което му дава голяма свобода за научните му изследвания. В началото на 80 -те години, след като напуска IBM, той става професор в Харвард, но се установява за постоянно в Йейл.

Работата му през 60 -те и началото на 70 -те години го накара да публикува известна статия, озаглавена „Фрактални обекти“, в която той показа, че тези обекти, считани от голяма част от математическата общност като обикновени любопитства, се срещат навсякъде в природата. Той даде много примери в най -различни области като физика, хидрология, финанси, метеорология, география, геология, металургия …

Какво представлява комплектът Mandelbrot?

Да започнем, да кажем, че това е хубав чертеж, генериран от програма. И тази програма е съвсем проста. Съществуват много компютърно генерирани чертежи и много компютърен софтуер за тяхното генериране. И така, какво толкова специално има в това? Първо, множеството Манделброт е подмножество от плана, съвкупност от точки. Той съдържа области, но също така и гладки криви, нишки, точки, от които излизат множество клони, и други неща. Второ: това е наистина завладяващо и има много интересна история.

В началото на 20-ти век френските математици Пиер Фату и Гастон Юлия разработиха поддомейн на математиката, наречен холоморфна динамика. Те се интересуваха от конкретни функции, действащи върху числа, използвайки някои от най -простите налични формули. Въпросните числа са комплексни числа, количества, представени с две координати (точно като точките на равнина), наречени реални и въображаеми части. Те са изобретени през 16 век от математици, за да помогнат за намирането на корените на полиномите и решението на уравнения, но са намерили широко и дълбоко приложение в математиката и физическите науки. Можем да добавим 2 комплексни числа, да ги умножим или разделим и да направим много други неща. Фату и Джулия изучават свойствата на определени динамични системи, където комплексното число варира според просто правило, повтаряно отново и отново: няма нужда от сложна математика тук (така че можете да забравите първото изображение …). Те разкриха богатството на тези системи, определиха множествата, които сега се наричат множества на Джулия, и изучиха тяхното сходство, следователно фрактален аспект … но думата не съществуваше по това време, защото беше измислена много по-късно от … Беноа Манделброт!

След работата на основателите този домейн падна в забрава. Когато компютрите пристигнаха, те помогнаха да се изследват много математически явления, изискващи интензивни изчисления, включително домейна, отворен от Джулия и Фату. Така, когато Беноа Манделброт реши да използва компютрите на IBM през 80 -те години на миналия век, за да представи определен математически набор, свързан с холоморфната динамика, той получи много атрактивна и много интригуваща рисунка (първа снимка от предишния раздел).

Какво представлява комплектът Mandelbrot? По принцип има основна динамична система, свързана с всяка точка на изображението. Координатите на точката действат като регулируем параметър. Различните точки съответстват на различни набори от Джулия и в зависимост от тяхното поведение можем да решим да оцветим точката по определен начин. Множеството Манделброт е набор от параметри, за които системата има определено свойство.

Как да се изчислят множествата на Манделброт и Джулия?

Трябва да навлезем в малко по -подробно как да изчислим тези множества. Множествата на Манделброт и Джулия се изчисляват чрез многократната итерация на проста формула, в нашия случай z^n+c. z е комплексно число, което представлява координатите на точка на дисплея. е цялостен показател, така че z^n е равно на z, умножено по себе си n пъти, а c е константа.

За множеството Mandelbrot, за всички точки в областта на дисплея, инициализираме z на 0. Константата c се приема равна на стойността на координатите на разглежданата точка и формулата се повтаря.

Ето правилото: точка е част от множеството, ако многократното прилагане на тази формула не се разминава (т.е. не води до изчисления към големи числа). Математически може да се покаже, че ако резултатът от формулата надвишава 2 (по модул, тъй като говорим за комплексни числа), итерацията ще се разминава. Така че за бързо получаване на красиви цветове, спираме итерацията, когато модулът на резултата надвиши 2 и цветът съответства на броя на тази конкретна итерация. Ако броят на итерациите стане твърде голям (така че ако точката е част от множеството на Манделброт), ние спираме след даден праг и свързваме черния цвят с тази точка.

Множеството Julia се изчислява по подобен начин, но изчисленията не се инициализират на 0, а на стойността на координатите на разглежданата точка и константата c се избира от потребителя и остава същата за цялото изображение.

Това е, надявам се да е ясно … Тези обяснения помагат да се разбере по -добре останалата част от инструкциите за употреба.

Стъпка 2: Какво ви трябва?

Какво ти е необходимо?
Какво ти е необходимо?
Какво ти е необходимо?
Какво ти е необходимо?
Какво ти е необходимо?
Какво ти е необходимо?
Какво ти е необходимо?
Какво ти е необходимо?

Сметка на материала:

  • 1 платка ESP32
  • 1 TFT дисплей със сензорен екран и писалка
  • 1 макет и проводници

Това е. Обща цена под 10 USD.

ESP32 на Espressif е двуядрен микроконтролер, работещ на 240 MHz, което го прави добър кандидат за бързи и сложни повтарящи се изчисления. Той има WiFi и Bluetooth възможности, които не използвам в този проект.

Наборът от инструкции е с размер 32 бита. Изчисляването с 16 и 32 битови променливи е много бързо, което позволява точни изчисления, което е от основно значение за целите на мащабиране. В това приложение, за дисплей с размери 320 x 240, изображението се прави приблизително от 75 000 пиксела, всеки от които се изчислява с помощта на итерационен процес, който може да работи до 100 пъти. Това може да доведе до 7 500 000 единични изчисления, всяко от които е степенна степен, т.е. няколко умножения …

Така че скоростта на изчисление е от съществено значение, но точността е от основно значение. Колкото повече увеличавате, толкова по -малък е размерът на частта от комплекта за показване. Това означава, че всеки от 320 x 240 пиксела на изображението представлява число, което е много близко до съседите му. С увеличаването на мащаба тази близост се увеличава.

Но фракталните изображения имат това свойство, че остават непроменени чрез мащабиране. Така че малките детайли се появяват навсякъде и за всеки фактор на мащабиране. Основната форма на комплекта Mandelbrot, както се вижда на дисплея на горната снимка, може да се намери някъде другаде в много по -малка версия и да се покаже, ако приближите достатъчно близо (вижте във видеото). Но ако разликата в координатите между два съседни пиксела е твърде малка, за да позволи на ESP32 да улови разликата им в поведението, поради липса на точност, фракталният ефект не може да бъде показан …

За да получите добра точност, кодът използва поплавки, които са кодирани в 32 бита от ESP32. Това позволява до 6 или 7 нива на мащабиране. Използването на двойна прецизност (64 бита) би увеличило тази дълбочина на мащабиране, с цената на по -бавни изчисления, като по този начин увеличава времето между 2 изображения.

За да направите двойната прецизност, просто променете всички случаи на "float" на "double" в кода и стартирайте кода. Наскоро направих версия за по -голям дисплей (HVGA 480 x 320 пиксела): 16 -битовите поплавки отнемат 3 секунди за показване на изображението, а двойните отнемат между 10 и 20 секунди (3 до 6 пъти по -дълго), но поддържат повече от 15 нива на увеличение. Третото изображение в тази глава показва нивото на мащабиране 14 в най-дясната част на набора Mandelbrot.

Как да свържете дисплея:

Използвах SPI дисплей и параметрите са зададени във файла User_Setup.h (в папката на библиотеката TFT_eSPI):

  • Драйвер: разкомментирайте правилния драйвер за вашия дисплей. Моят беше #define RPI_ILI9486_DRIVER
  • ПИН номера: отидете в раздела ESP32 на файла и изберете

    • #дефинирайте TFT_MISO 19
    • #дефинирайте TFT_MOSI 23
    • #дефинирайте TFT_SCLK 18
    • #define TFT_CS 15 // Контролен щифт за избор на чип
    • #define TFT_DC 2 // Контролен щифт на командата за данни
    • #define TFT_RST 4 // Нулиране на щифт (може да се свърже с RST пин)
    • #define 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 към комплекта на Julia и обратно.

Етикетите на някои клавиши се променят според контекста: те показват функцията, която ще се изпълни, ако се натисне. Така че, ако в момента показвате набора Mandelbrot, бутонът M/J показва J, тъй като ако го натиснете, ще покажете комплекта на Джулия (и обратно).

Същото важи и за избора на цветовата палитра. Започваме със зелената палитра. Ключът предлага следващата палитра (синята). Палитрите са: червено, зелено, синьо, сиво, палитра 1, палитра 2 и обратно към червено. Последните два са многоцветни палитрови тестове, които осигуряват по -голям контраст, позволявайки по -добре да се видят някои детайли.

Ключът с число ви позволява да изберете степента n, в цикъл от 2 до 7 (и обратно до 2). В същия дух показва 3, ако в момента сте на 2 …

И накрая, когато показвате набора Julia, е необходимо да изберете стойността на константата c: клавишът C ви позволява да направите това, благодарение на селектор (вижте втората снимка). Стойността на тази константа се показва с набора.

Щракването върху изображението увеличава около избраната точка. В точката на докосване се показва малък кръг и правоъгълник подчертава увеличената зона на комплекта.

Третата снимка показва, че изчислителните времена остават между 0,8 и 1,2 секунди за 320 x 240 пиксела, което го прави удобен за мащабиране и показване. Той достига 3 секунди за 480 x 320 пиксела, но предоставя повече подробности.

Стъпка 4: Обяснени са някои снимки …

Някои обяснени снимки …
Някои обяснени снимки …
Обяснени снимки …
Обяснени снимки …
Някои обяснени снимки …
Някои обяснени снимки …

Най -голямата картина е добре познатият комплект Манделброт. Комплексните числа, използвани в това изображение, варират от -2,1 до +0,7 в абсциса и -1,2 до 1,2 в ордината. Ако приближите най-лявата част на това първо изображение, има вероятност най-накрая да получите второто, което показва по-малка версия на оригиналния комплект, намерен в най-лявата част на комплекта. За двете изображения експонентът ('n') е равен на 2: това е стойността, която обикновено се използва за показване на множествата на Манделброт.

Ако промените тази стойност на 3 (просто щракнете върху клавиша, казващ 3), получавате третото изображение. Една очевидна разлика е коефициентът на симетрия: n = 2 дава аксиална симетрия (т.е. множеството е симетрично спрямо средната хоризонтална ос), но при n = 3 изображението става инвариантно чрез завъртане на 120 ° (една трета от 360 °, завъртане коефициент на симетрия 3). И той запазва своите фрактални свойства, които можете да проверите, като увеличите краищата на черната форма.

Четвъртото изображение е набор от Джулия, получен след избор на стойност на коефициента, равна на 0,414 в абсциса и 0,09 в ордината. Избрана е червената палитра, както може да се види от зеления бутон вдясно (зеленият е следващият цвят, който трябва да бъде избран). Петото изображение показва същия вид набор от Джулия, който е по -висока въображаема част от константата (0,358).

Надявам се, че ще ви хареса да играете с тази програма и че ще можете да показвате хубави фрактални снимки. Не се колебайте да разгледате комплектите Mandelbrot и Julia и да играете с палитрите: те помагат да се идентифицират някои детайли, които може да не се виждат с обикновените монохромни. Може дори да откриете някои фрактални пейзажи, които никой никога не е виждал преди вас …

_

Искате ли да откриете още фрактални изображения? Просто щракнете тук или разгледайте фракталното изкуство или дори ascii фрактала. Може би тази инструкция ще ви накара да искате да създадете такива страхотни изображения …

Направено с математически конкурс
Направено с математически конкурс
Направено с математически конкурс
Направено с математически конкурс

Втора награда в конкурса Made with Math

Препоръчано: