Агуулгын хүснэгт:

Манделброт, Жулиа нар 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) нэрээр нэрлэжээ.

Фрактал объект гэж юу вэ?

Далайн эргийн шугам, үүлний хэлбэр, мод гэх мэт эмх замбараагүй мэт санагдаж болох байгалийн жигд бус байдал нь үнэндээ масштаб өөрчлөгдөж буй маш нарийн геометрийн илэрхийлэл юм. Энэ утгаараа бутархай хэмжигдэхүүний тухай ойлголт нь ердийн Евклидийн хэмжээсийг орлодог (энэ нь үргэлж бүхэл тоо байдаг)!

Фрактал объект гэдэг нь түүний аль ч хэсгийг бүхэлд нь адилхан болгодог (үүнийг өөрөө ижил төстэй байдал гэж нэрлэдэг): түүний бүтэц нь масштабын өөрчлөлтөөр өөрчлөгддөггүй.

"Фрактал" гэсэн нэр томъёо нь 1974 онд Benoît Mandelbrot -ийн Латин үндэс fractus -аас бүтээсэн неологизм бөгөөд "эвдэрсэн", "тогтмол бус" гэсэн утгатай. Энэ бол нэр үг, нэр томъёо юм. Далайн эргийн тойм эсвэл Романеско байцааны дүр төрх гэх мэт байгалийн олон үзэгдлүүд ойролцоогоор фрактал хэлбэртэй байдаг.

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

1960 -аад оны 70 -аад оны эхэн үеийн ажил нь түүнийг "Фрактал объектууд" нэртэй алдартай нийтлэл хэвлүүлэхэд хүргэсэн бөгөөд үүнд математикийн олон нийтийн ихээхэн хэсэг нь зүгээр л сониуч зан гэж үздэг эдгээр объектууд байгалиас хаа сайгүй олддог болохыг харуулсан юм. Тэрээр физик, ус судлал, санхүү, цаг уур, газар зүй, геологи, металлурги гэх мэт олон чиглэлээр маш олон жишээ өгсөн.

Mandelbrot гэж юу вэ?

Эхлэхийн тулд энэ нь програмын бүтээсэн сайхан зураг гэж хэлье. Энэхүү програм нь маш энгийн бөгөөд компьютер дээр бүтээсэн олон зураг, тэдгээрийг бий болгох олон компьютерийн програм хангамж байдаг. Тэгвэл энэ онцлог нь юугаараа онцлог вэ? Нэгдүгээрт, Mandelbrot багц нь төлөвлөгөөний дэд хэсэг, цэгүүдийн цуглуулга юм. Энэ нь хэсэг хэсгүүдээс гадна гөлгөр муруй, судлууд, олон мөчрүүдээс гардаг цэгүүд болон бусад зүйлийг агуулдаг. Хоёрдугаарт: энэ үнэхээр гайхалтай бөгөөд маш сонирхолтой түүхтэй.

20-р зууны эхэн үед Францын математикчид Пьер Фату, Гастон Жулиа нар холоморф динамик гэж нэрлэгддэг математикийн дэд домэйныг бүтээжээ. Тэд тоон дээр ажилладаг, хамгийн энгийн томъёог ашиглан тодорхой функцийг сонирхож байв. Асуудалтай тоонууд нь тоонууд бөгөөд бодит ба төсөөллийн хэсгүүд гэж нэрлэгддэг хоёр координатаар (хавтгайн цэгүүд шиг) илэрхийлэгдсэн тоо юм. Тэднийг 16 -р зуунд математикчид олон гишүүнтүүдийн үндэс, тэгшитгэлийн шийдлийг олохын тулд зохион бүтээсэн боловч математик, физикийн шинжлэх ухаанд өргөн, гүнзгий хэрэглээг олж чадсан юм. Фато, Жулиа хоёр нарийн төвөгтэй тоог нэмж, үржүүлж, хувааж, бусад олон зүйлийг хийж болно. (Тиймээс та анхны зургийг мартаж болно …). Тэд эдгээр системийн баялаг байдлыг илчилж, одоо Жулиягийн олонлог гэж нэрлэгддэг олонлогийг тодорхойлж, бие биетэйгээ ижил төстэй байдлыг нь судалж үзсэн тул фрактал талыг нь судалсан … гэхдээ энэ үгийг тэр үед огт байгаагүй, учир нь үүнийг … Бенуа Мандельброт!

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

Mandelbrot багц нь юуг илэрхийлдэг вэ? Үндсэндээ зургийн цэг бүртэй холбоотой суурь динамик систем байдаг. Цэгийн координат нь тохируулах параметрийн үүрэг гүйцэтгэдэг. Өөр өөр цэгүүд нь Жулиягийн янз бүрийн багцад нийцдэг бөгөөд тэдний зан авираас хамаарч бид тухайн цэгийг тодорхой өнгөөр будахаар шийдэж болно. Mandelbrot багц нь тухайн систем тодорхой шинж чанартай параметрүүдийн багц юм.

Манделброт, Жулиа хоёрын багцыг хэрхэн тооцоолох вэ?

Эдгээр багцыг хэрхэн тооцоолох талаар бид илүү дэлгэрэнгүй ярих хэрэгтэй. Манделброт, Жулиа хоёрын багцыг энгийн томъёог дахин давтах замаар тооцоолно, манай тохиолдолд z^n+c. z нь дэлгэц дээрх цэгийн координатыг илэрхийлэх цогц тоо юм. бүхэл тоон экспонент учраас z^n нь z -тэй тэнцүү n удаа өөрийгөө үржүүлж, c нь тогтмол байна.

Mandelbrot олонлогийн хувьд дэлгэцийн талбайн бүх цэгүүдийн хувьд бид z -ийг 0 болгоно. С тогтмолыг авч үзсэн цэгийн координатын утгатай тэнцүү авч томъёог давтана.

Дүрэм энд байна: хэрэв энэ томъёог дахин давтах нь зөрөхгүй бол (өөрөөр хэлбэл олон тооны тооцоог хийхэд хүргэхгүй бол) цэг нь олонлогийн нэг хэсэг болно. Хэрэв томъёоны үр дүн 2 -оос хэтэрвэл (модулийн хувьд бид нарийн төвөгтэй тоонуудын тухай ярьж байгаа бол) давталт нь зөрөх болно гэдгийг математикаар харуулж болно. Үзэсгэлэнт өнгийг хурдан олж авахын тулд үр дүнгийн модулийг 2 -оос хэтрүүлж, өнгө нь тухайн давталтын тоотой тохирч байвал бид давталтыг зогсооно. Хэрэв давталтын тоо хэтэрхий их болвол (хэрэв цэг нь Mandelbrot багцад багтсан бол) бид өгөгдсөн босгын дараа зогсоод хар өнгийг энэ цэгтэй холбоно.

Жулиягийн багцыг ижил аргаар тооцоолсон боловч тооцооллыг 0 -ээр эхлүүлээгүй боловч тухайн цэгийн координатын утгаар тооцож, тогтмол c -ийг хэрэглэгч өөрөө сонгож, бүх зургийн хувьд ижил хэвээр байна.

Энэ бол ойлгомжтой гэж найдаж байна … Эдгээр тайлбарууд нь ашиглах бусад зааврыг илүү сайн ойлгоход тусална.

Алхам 2: Танд юу хэрэгтэй вэ?

Чамд юу хэрэгтэй?
Чамд юу хэрэгтэй?
Чамд юу хэрэгтэй?
Чамд юу хэрэгтэй?
Чамд юу хэрэгтэй?
Чамд юу хэрэгтэй?
Чамд юу хэрэгтэй?
Чамд юу хэрэгтэй?

Материалын тооцоо:

  • 1 ESP32 самбар
  • Мэдрэгчтэй дэлгэц ба зүү бүхий 1 TFT дэлгэц
  • 1 талх, утас

Ингээд л боллоо. Нийт өртөг нь 10 доллар.

Espressif -ийн ESP32 нь 240 МГц давтамжтай ажилладаг хоёр цөмт микроконтроллер бөгөөд хурдан, нарийн төвөгтэй давтагдах тооцоололд сайн нэр дэвшигч болгодог. Энэ нь энэ төсөлд ашигладаггүй WiFi болон Bluetooth багтаамжтай.

Зааварчилгааны багц нь 32 бит хэмжээтэй байна. 16 ба 32 битийн хувьсагчтай тооцоолох нь маш хурдан бөгөөд нарийвчлалтай тооцоолох боломжийг олгодог бөгөөд энэ нь томруулах зориулалттай юм. Энэхүү аппликейшнд 320 х 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 номын сангийн хавтсанд) тохируулсан болно.

  • Жолооч: дэлгэцийнхээ зөв драйверыг тайлбарлахгүй. Минийх #RPI_ILI9486_DRIVER -ийг тодорхойлсон
  • Пин дугаар: файлын ESP32 хэсэгт очоод сонгоно уу

    • #тодорхойлох TFT_MISO 19
    • #тодорхойлох TFT_MOSI 23
    • #тодорхойлох TFT_SCLK 18
    • #define TFT_CS 15 // Чип сонгох хяналтын зүү
    • #define TFT_DC 2 // Data Command хяналтын зүү
    • #define TFT_RST 4 // Зүүг дахин тохируулах (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: "дахин тохируулах" ажлыг гүйцэтгэдэг, i. д. зургийг хамгийн дээд хэмжээнд нь харуулна,
  • U: "буцаах" нь өмнөх алхам руу буцах боломжийг олгодог (хэрэв томруулсан бүс нь сонирхолгүй бол томруулахын тулд зургийн өөр хэсгийг сонгож болно),
  • M эсвэл J: танд Mandelbrot -ийн багцаас Julia -ийн багц руу шилжих боломжийг олгодог.

Зарим түлхүүрүүдийн шошго нь контекстээс хамааран өөрчлөгддөг: дарагдсан тохиолдолд гүйцэтгэх функцийг харуулдаг. Тиймээс, хэрэв та одоогоор Mandelbrot багцыг харуулсан бол M/J товчлуур нь J -г харуулна, учир нь хэрэв та дарвал Жулиягийн багцыг харуулна (мөн эсрэгээр).

Өнгөт палитрыг сонгоход мөн адил хамаарна. Бид ногоон палитраас эхэлдэг. Түлхүүр нь дараагийн палитрыг санал болгодог (цэнхэр). Палеттууд нь: улаан, ногоон, цэнхэр, саарал, 1 -р палитр, 2 -р палитр, улаан өнгөтэй. Сүүлийн хоёр нь олон өнгийн тавиурын туршилт бөгөөд илүү тодосгогч байдлыг бий болгож, зарим нарийн ширийн зүйлийг илүү сайн харах боломжийг олгодог.

Тоо бүхий түлхүүр нь 2 -оос 7 хүртэл (мөн 2 руу буцах) давталт n -ийг сонгох боломжийг танд олгоно. Үүнтэй ижил байдлаар, хэрэв та одоо 2 -т байгаа бол 3 -ийг харуулна

Эцэст нь, Жулия багцыг харуулахдаа c тогтмол утгыг сонгох шаардлагатай: С товчлуур нь сонгогчийн ачаар үүнийг хийх боломжийг олгодог (хоёр дахь зургийг үзнэ үү). Энэ тогтмолын утгыг олонлогтой хамт харуулна.

Зураг дээр дарахад сонгосон цэгийг тойрон томруулна. Хүрсэн цэг дээр жижиг тойрог гарч ирэх бөгөөд тэгш өнцөгт нь багцын томруулсан бүсийг тодруулна.

3 -р зурагт тооцоолох хугацаа нь 320 х 240 пикселийн хувьд 0.8-1.2 секундын хооронд үлддэг бөгөөд энэ нь томруулж, харуулахад тохиромжтой болгодог. Энэ нь 480 x 320 пикселийн хувьд 3 секунд хүрэх боловч илүү дэлгэрэнгүй мэдээлэл өгдөг.

Алхам 4: Зарим зургийг тайлбарлав …

Зарим зургийг тайлбарлав …
Зарим зургийг тайлбарлав …
Зарим зургийг тайлбарлав …
Зарим зургийг тайлбарлав …
Зарим зургийг тайлбарлав …
Зарим зургийг тайлбарлав …

Хамгийн том зураг бол бидний сайн мэдэх Mandelbrot багц юм. Энэ зурагт ашигласан цогц тоо нь abscissa -2.1 -ээс +0.7 хүртэл, ординатын хувьд -1.2 -оос 1.2 хооронд хэлбэлздэг. Хэрэв та энэ анхны зургийн зүүн хэсгийг томруулж харвал эцэст нь хоёрдахь зургийг авах боломжтой бөгөөд энэ нь багцын хамгийн зүүн талд байгаа анхны багцын жижиг хувилбарыг харуулах болно. Эдгээр зургуудын хувьд экспонент ('n') нь 2 -тэй тэнцүү: энэ нь ихэвчлэн Mandelbrot багцыг харуулахад хэрэглэгддэг утга юм.

Хэрэв та энэ утгыг 3 болгож өөрчилвөл (3 гэсэн түлхүүр дээр дарна уу) гурав дахь дүрсийг авах болно. Нэг тод ялгаа нь тэгш хэмийн хүчин зүйл юм: n = 2 нь тэнхлэгийн тэгш хэмийг өгдөг (өөрөөр хэлбэл олонлог нь дундаж хөндлөн тэнхлэгийн эсрэг тэгш хэмтэй байдаг), гэхдээ n = 3 бол зураг нь 120 ° эргэх замаар өөрчлөгддөггүй (360 ° -ын гуравны нэг, эргэлт) тэгш хэмийн коэффициент 3). Энэ нь фрактал шинж чанараа хадгалж үлдсэн бөгөөд үүнийг хар хэлбэрийн ирмэгийг томруулж харах боломжтой.

4 -р зураг бол abscissa -д 0.414, ординатад 0.09 -тэй тэнцүү коэффициентийг сонгосны дараа олж авсан Julia багц юм. Улаан палитрыг сонгосон бөгөөд үүнийг баруун талын ногоон товчлуураас харж болно (ногоон, дараагийн сонгох өнгө). Тав дахь зурган дээр ижил төсөөллийн хэсэг болох Жулиягийн багц гарч ирэв (0.358).

Энэхүү програмаар тоглох нь танд таалагдаж, сайхан фрактал зургуудыг үзүүлэх боломжтой болно гэж найдаж байна. Mandelbrot, Julia -ийн багцыг судалж, палитраар тоглохдоо бүү эргэлзээрэй: тэд энгийн монохромтой харагдахгүй байж болох зарим нарийн ширийн зүйлийг олж тогтооход тусалдаг. Та өмнө нь хэн ч харж байгаагүй фрактал ландшафтыг олж мэдэх боломжтой.

_

Илүү олон фрактал зургуудыг олж мэдмээр байна уу? Зүгээр л энд дарна уу эсвэл фрактал урлаг, тэр ч байтугай ascii фракталтай танилцаарай. Магадгүй энэ зааварчилгаа нь танд ийм гайхалтай зургуудыг бүтээх хүсэл төрүүлэх болно …

Математикийн уралдаанаар хийсэн
Математикийн уралдаанаар хийсэн
Математикийн уралдаанаар хийсэн
Математикийн уралдаанаар хийсэн

Математикаар хийсэн уралдааны хоёрдугаар шагнал

Зөвлөмж болгож буй: