Мазмуну:

Mandelbrot жана Julia ESP32де: 4 кадам (сүрөттөр менен)
Mandelbrot жана Julia ESP32де: 4 кадам (сүрөттөр менен)

Video: Mandelbrot жана Julia ESP32де: 4 кадам (сүрөттөр менен)

Video: Mandelbrot жана Julia ESP32де: 4 кадам (сүрөттөр менен)
Video: ФРАКТАЛ Маска 2024, Июль
Anonim
Image
Image
Mandelbrot жана Julia ESP32ге орнотулат
Mandelbrot жана Julia ESP32ге орнотулат
Mandelbrot жана Julia ESP32ге орнотулат
Mandelbrot жана Julia ESP32ге орнотулат

Сиз, албетте, фракталдарды билесиз, алардын эң атактуусу Mandelbrot набору.

Бул жерде ESP32де ойной турган программа. Мен ESP32ди тандадым, анткени мен эсептөөлөрдү стандарттык Arduinoго караганда тезирээк жасайт деп ойлойм (жогорку жыштык: 240 МГц): эсептөө жана көрсөтүү үчүн секунддан секундага чейин.

Код 480 x 320 TFT сенсордук экранда көрсөтүлөт. Бул Mandelbrot жана Julia топтомдорун бир нече параметр баалуулуктары үчүн эсептейт жана фракталдык аспектти көрүү үчүн кызыккан жерлерди чоңойтууга мүмкүндүк берет (б.а. ар бир масштабда бир структуралардын болушу). Эсептөөлөрдүн тактыгы чектелгендиктен, масштабдын деңгээли чектелген, бирок сүрөт начарлап кете электе, бир жарым ондогон масштабда жасоого болот.

Фракталдардын сыйкырдуу дүйнөсүн изилдөөгө даяр болуңуз …

1 -кадам: Mandelbrot жана Julia Sets деген эмне?

Mandelbrot жана Julia Sets деген эмне?
Mandelbrot жана Julia Sets деген эмне?
Mandelbrot жана Julia Sets деген эмне?
Mandelbrot жана Julia Sets деген эмне?
Mandelbrot жана Julia Sets деген эмне?
Mandelbrot жана Julia Sets деген эмне?

Mandelbrot топтому 19-кылымдын аягында Пеано, Сиерпински жана Юлия тарабынан демилгеленген, фракталдык геометрияда пионердик иштерди жасаган француз жана америкалык математик Бенуа Манделброттун (1924-2010) урматына аталган.

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

Деңиз жээгинин сызыгы, булуттардын формасы, дарак сыяктуу башаламан көрүнүшү мүмкүн болгон табияттын мыйзам бузуулары, чындыгында, масштабы өзгөрүп бараткан өтө татаал геометриянын көрүнүшү. Бул контекстте, бөлчөк өлчөмү түшүнүгү кадимки евклиддик өлчөмдүн ордуна келет (ал ар дайым бүтүн сан)!

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

"Фрактал" термини 1974 -жылы Бенуа Мандельброт тарабынан латындын fractus тамырынан түзүлгөн, "сынган", "бир калыпта эмес" деген маанини билдирген неологизм. Бул зат атооч жана сын атооч. Көптөгөн табигый кубулуштар - мисалы, жээк сызыктарынын контуру же Романеско капустасынын көрүнүшү (сүрөттү караңыз) - болжол менен фракталдык формаларга ээ.

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

Анын 1960 -жылдардагы жана 1970 -жылдардын башындагы эмгеги аны "Фракталдык объектилер" аттуу атактуу макаласын жарыялоого алып келген, анда ал математикалык коомчулуктун чоң бөлүгү жөн гана кызыктар катары эсептеген бул объектилер жаратылыштын бардык жеринде табылганын көрсөткөн. Ал физика, гидрология, финансы, метеорология, география, геология, металлургия сыяктуу көптөгөн тармактарда көптөгөн мисалдарды келтирди.

Mandelbrot деген эмне?

Баштоо үчүн, бул программа тарабынан түзүлгөн сонун чийме деп коёлу. Жана бул программа абдан жөнөкөй. Аларды түзүү үчүн көптөгөн компьютердик чиймелер жана көптөгөн компьютердик программалар бар. Демек, мунун өзгөчөлүгү эмнеде? Биринчиден, Mandelbrot топтому - бул пландын бир бөлүгү, пункттардын жыйнагы. Ал аймактарды камтыйт, бирок жылмакай ийри сызыктарды, жипчелерди, бир нече бутактары чыккан чекиттерди жана башка нерселерди камтыйт. Экинчиден: бул абдан кызыктуу жана абдан кызыктуу тарыхы бар.

20-кылымдын башында француз математиктери Пьер Фату менен Гастон Юлия математиканын холоморфикалык динамика деп аталган суб-доменин иштеп чыгышкан. Алар белгилүү функцияларга кызыкдар болушту, сандарга карап, кээ бир жөнөкөй формулаларды колдонушту. Каралып жаткан сандар татаал сандар, эки координат менен чагылдырылган чоңдуктар (тегиздиктин чекиттери сыяктуу) чыныгы жана элестүү бөлүктөр деп аталат. Алар 16 -кылымда математиктер тарабынан полиномдордун тамырларын жана теңдемелердин чечимин табууга жардам берүү үчүн ойлоп табылган, бирок математика менен физика илимдеринде кеңири жана терең колдонмолорду табышкан. Биз 2 татаал санды кошуп, көбөйтүп же бөлүп, жана башка көптөгөн нерселерди жасай алабыз. Фату менен Юлия белгилүү бир динамикалык системалардын касиеттерин изилдешкен, бул жерде татаал сан кайра -кайра кайталанган жөнөкөй эрежеге ылайык өзгөрөт: бул жерде татаал математиканын кереги жок (Ошентип, сиз биринчи сүрөттү унута аласыз …). Алар бул системалардын байлыгын ачып беришти, азыр Юлиянын топтомдору деп аталган топтомдорду аныкташты жана алардын окшоштугун, андыктан фракталдык аспектилерин изилдешти … бирок ал убакта бул сөз жок болчу, анткени ал кийинчерээк … Бенуа Мандельброт тарабынан ойлонулган!

Уюштуруучулардын иштеринен кийин бул домен унутулуп калган. Компьютерлер келгенде, алар интенсивдүү эсептөөнү талап кылган көптөгөн математикалык кубулуштарды, анын ичинде Юлия менен Фату ачкан доменди изилдөөгө жардам беришти. Ошентип, Бенуа Мандельброт 1980 -жылдары IBM компьютерлерин колдонууну чечкенде, холоморфикалык динамикага байланыштуу белгилүү бир математикалык комплексти көрсөткөн., ал абдан кызыктуу жана абдан кызыктуу чиймеге ээ болду (мурунку бөлүмдүн биринчи сүрөтү).

Mandelbrot топтому эмнени билдирет? Негизинен, сүрөттүн ар бир чекитине байланышкан негизги динамикалык система бар. Нүктөнүн координаттары жөнгө салынуучу параметр катары иштейт. Ар кандай пункттар Юлиянын ар кандай топтомдоруна туура келет жана алардын жүрүм -турумуна жараша, биз чекитти белгилүү бир жол менен боёону чече алабыз. Mandelbrot топтому - бул система белгилүү бир касиетке ээ болгон параметрлердин жыйындысы.

Mandelbrot жана Julia топтомдорун кантип эсептөө керек?

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

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

Бул жерде эреже бар: эгер бул формуланы кайталап колдонуу айырмаланбаса (б.а. чоң сандарга карата эсептөөлөргө алып келбесе), чекиттин бир бөлүгү. Эгерде формуланын жыйынтыгы 2ден ашса (модулда комплекстүү сандар жөнүндө айтып жаткандыктан) итерация айырмаланарын математикалык түрдө көрсөтүүгө болот. Ошентип, тез эле татынакай түстөрдү алуу үчүн, натыйжанын модулу 2ден ашканда жана түс ошол кайталоонун санына туура келгенде, кайталоону токтотобуз. Кайталоолордун саны өтө чоң болуп кетсе (эгер чекит Mandelbrot топтомунун бир бөлүгү болсо), биз белгиленген босогодон кийин токтоп, кара түстү ушул чекитке байланыштырабыз.

Юлия топтому ушундай эле жол менен эсептелет, бирок эсептөөлөр 0де эмес, каралып жаткан чекиттин координаттарынын мааниси боюнча колдонулат жана c туруктуу колдонуучу тарабынан тандалат жана бүтүндөй сүрөттө ошол бойдон калат.

Болду, бул түшүнүктүү деп үмүттөнөм … Бул түшүндүрмөлөр колдонуу боюнча башка көрсөтмөлөрдү жакшыраак түшүнүүгө жардам берет.

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" пайда болгон бардык коддорду "double" кылып өзгөртүп, кодду иштетиңиз. Жакында мен чоңураак дисплейдин версиясын жасадым (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 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тун топтомунан Юлиянын топтомуна жана тескерисинче өтүүгө мүмкүндүк берет.

Кээ бир баскычтардын энбелгилери контекстке жараша өзгөрөт: алар басылганда аткарыла турган функцияны көрсөтөт. Ошентип, эгер сиз учурда Mandelbrot топтомун көрсөтсөңүз, M/J баскычы J көрсөтөт, эгер сиз аны бассаңыз Юлиянын топтомун көрсөтөсүз (жана тескерисинче).

Бул түс палитрасын тандоого да тиешелүү. Биз жашыл палитра менен баштайбыз. Ачкыч кийинки палитра (көк) сунуш кылат. Палитралар: кызыл, жашыл, көк, боз, палитра 1, палитра 2 жана кайра кызылга. Акыркы экөө - көп түстүү паллет тесттери, алар көбүрөөк контрастты камсыз кылып, кээ бир деталдарды жакшыраак көрүүгө мүмкүндүк берет.

Саны бар ачкыч 2ден 7ге чейинки циклде n көрсөткүчүн тандоого мүмкүндүк берет (жана кайра 2ге). Ошол эле маанайда, эгер сиз учурда 2де болсоңуз, анда 3 көрсөтүлөт …

Акыр -аягы, Юлия топтомун көрсөткөндө, c сандын туруктуу маанисин тандоо керек: С баскычы селектордун жардамы менен муну кылууга мүмкүндүк берет (экинчи сүрөттү караңыз). Бул константанын мааниси жыйындысы менен көрсөтүлөт.

Сүрөттү басуу тандалган чекиттин айланасын чоңойтот. Тийилген жерде кичинекей тегерек көрсөтүлөт жана тик бурчтук топтомдун чоңойтулган аймагын баса белгилейт.

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 топтомдорун изилдеп, палитралар менен ойногондон тартынбаңыз: алар жөнөкөй монохромдуу көрүнбөгөн айрым деталдарды аныктоого жардам берет. Сизге чейин эч ким көрбөгөн кээ бир фракталдык пейзаждарды ачсаңыз болот …

_

Дагы фракталдык сүрөттөрдү тапкыңыз келеби? Жөн гана бул жерди басыңыз же фракталдык искусствону, ал тургай ascii фракталын изилдеңиз. Балким, бул көрсөтмө сизди ушундай сонун сүрөттөрдү жаратууга түрткү бериши мүмкүн …

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

Математика менен жасалган конкурстун экинчи сыйлыгы

Сунушталууда: