Isi kandungan:

Mandelbrot dan Julia Tetapkan pada ESP32: 4 Langkah (dengan Gambar)
Mandelbrot dan Julia Tetapkan pada ESP32: 4 Langkah (dengan Gambar)

Video: Mandelbrot dan Julia Tetapkan pada ESP32: 4 Langkah (dengan Gambar)

Video: Mandelbrot dan Julia Tetapkan pada ESP32: 4 Langkah (dengan Gambar)
Video: Perbedaan Mandelbrot Set dengan Julia Set #shorts #short #shortvideo 2024, Julai
Anonim
Image
Image
Mandelbrot dan Julia Menetapkan pada ESP32
Mandelbrot dan Julia Menetapkan pada ESP32
Mandelbrot dan Julia Menetapkan pada ESP32
Mandelbrot dan Julia Menetapkan pada ESP32

Anda pasti tahu fraktal, yang paling terkenal adalah set Mandelbrot.

Berikut adalah program untuk dimainkan di ESP32. Saya memilih ESP32 kerana saya fikir ia akan melakukan pengiraan lebih cepat daripada Arduino standard (frekuensi jam lebih tinggi: 240 MHz): kira-kira satu saat hingga satu detik dan setengah untuk pengiraan dan paparan.

Kod tersebut dipaparkan pada skrin sentuh TFT 480 x 320. Ia mengira set Mandelbrot dan Julia untuk beberapa nilai parameter, dan membolehkan anda memperbesar kawasan yang menarik untuk melihat aspek fraktal (iaitu kehadiran struktur yang sama pada setiap perubahan skala). Tahap zoom terhad kerana ketepatan pengiraan yang terhad, tetapi setengah dozen zoom boleh dibuat sebelum gambar merosot.

Bersedia untuk meneroka dunia sihir fraktal…

Langkah 1: Apakah Set Mandelbrot dan Julia?

Apakah Set Mandelbrot dan Julia?
Apakah Set Mandelbrot dan Julia?
Apakah Set Mandelbrot dan Julia?
Apakah Set Mandelbrot dan Julia?
Apakah Set Mandelbrot dan Julia?
Apakah Set Mandelbrot dan Julia?

Set Mandelbrot dinamai Benoit Mandelbrot (1924-2010), seorang ahli matematik Perancis dan Amerika yang melakukan kerja pionner dalam geometri fraktal, yang dimulakan pada akhir abad ke-19 oleh, antara lain, Peano, Sierpinski dan Julia.

Apakah objek fraktal?

Ketidakteraturan alam, yang mungkin tampak kacau, seperti garis pantai laut, bentuk awan, pohon, sebenarnya merupakan ungkapan geometri yang sangat kompleks pada skala perubahan. Dalam konteks ini, pengertian dimensi pecahan menggantikan dimensi Euclidean biasa (yang selalu menjadi bilangan bulat)!

Objek fraktal sedemikian rupa sehingga mana-mana bahagiannya sama dengan keseluruhan (ini disebut persamaan diri): strukturnya tidak berubah oleh perubahan skala.

Istilah "fraktal" adalah neologisme yang diciptakan oleh Benoît Mandelbrot pada tahun 1974 dari fraktus akar Latin, yang bermaksud "patah", "tidak teratur". Ini adalah kata nama dan kata sifat. Banyak fenomena semula jadi - seperti garis pinggir pantai atau penampilan kubis Romanesco (lihat gambar) - mempunyai bentuk fraktal yang hampir.

Benoît Mandelbrot mempunyai kerjaya yang agak tidak biasa: setelah mengajar di University of Lille (Perancis), dia mengambil kedudukan di IBM di mana dia dengan cepat menjadi Felo IBM, yang memberinya kebebasan besar untuk pengajian ilmiahnya. Pada awal 1980-an, setelah dia meninggalkan IBM, dia menjadi profesor di Harvard, tetapi menetap di Yale secara tetap.

Karyanya pada tahun 1960-an dan awal 1970-an mendorongnya untuk menerbitkan artikel terkenal yang berjudul "Fractal Objects" di mana dia menunjukkan bahawa objek-objek ini, yang dianggap oleh sebahagian besar komuniti matematik sebagai rasa ingin tahu, terdapat di mana-mana di alam. Dia memberikan banyak contoh dalam berbagai bidang seperti fisika, hidrologi, kewangan, meteorologi, geografi, geologi, metalurgi….

Apakah set Mandelbrot?

Sebagai permulaan, katakan bahawa ini adalah lukisan yang bagus yang dihasilkan oleh program. Dan program ini agak mudah. Terdapat banyak gambar yang dihasilkan komputer dan banyak perisian komputer untuk menghasilkannya. Jadi apa yang istimewa dari yang ini? Pertama, set Mandelbrot adalah subset rancangan, kumpulan poin. Ia mengandungi kawasan tetapi juga lekuk halus, filamen, titik dari mana banyak cabang muncul, dan lain-lain. Kedua: sungguh menarik dan mempunyai sejarah yang sangat menarik.

Pada awal abad ke-20, ahli matematik Perancis Pierre Fatou dan Gaston Julia mengembangkan sub-domain matematik yang disebut dinamik holomorfik. Mereka berminat dengan fungsi tertentu, menggunakan nombor, menggunakan beberapa formula termudah yang tersedia. Nombor yang dimaksud adalah nombor kompleks, kuantiti yang ditunjukkan oleh dua koordinat (sama seperti titik satah) yang disebut bahagian nyata dan khayalan. Mereka dicipta pada abad ke-16 oleh ahli matematik untuk membantu mencari akar polinomial dan penyelesaian persamaan tetapi telah menemui aplikasi yang luas dan mendalam dalam matematik dan sains fizikal. Kita dapat menambahkan 2 nombor kompleks, membiak atau membaginya, dan melakukan banyak perkara lain. Fatou dan Julia mengkaji sifat sistem dinamik tertentu di mana nombor kompleks berbeza mengikut peraturan mudah yang diulang berulang kali: tidak memerlukan matematik rumit di sini (jadi, anda boleh melupakan gambar pertama…). Mereka mengungkapkan kekayaan sistem ini, mendefinisikan set yang sekarang disebut set Julia, dan mempelajari persamaan diri mereka, oleh itu aspek fraktal … tetapi kata itu tidak ada pada masa itu kerana ia baru diciptakan kemudian, oleh … Benoît Mandelbrot!

Setelah kerja pengasas, domain ini tidak lagi dilupakan. Ketika komputer tiba, mereka membantu meneroka banyak fenomena matematik yang memerlukan pengkomputeran intensif, termasuk domain yang dibuka oleh Julia dan Fatou. Oleh itu, ketika Benoît Mandelbrot memutuskan untuk menggunakan komputer IBM pada tahun 1980-an untuk mewakili kumpulan matematik tertentu yang berkaitan dengan dinamika holomorfik, dia memperoleh gambar yang sangat menarik dan sangat menarik (gambar pertama bahagian sebelumnya).

Apa yang diwakili oleh set Mandelbrot? Pada dasarnya, terdapat sistem dinamik yang mendasari yang berkaitan dengan setiap titik gambar. Koordinat titik bertindak sebagai parameter laras. Titik yang berbeza sesuai dengan kumpulan Julia yang berbeza dan bergantung pada tingkah lakunya, kita dapat memutuskan untuk mewarnai titik dengan cara tertentu. Set Mandelbrot adalah sekumpulan parameter yang sistemnya mempunyai sifat tertentu.

Bagaimana cara mengira set Mandelbrot dan Julia?

Kita perlu melihat lebih terperinci mengenai cara mengira set ini. Set Mandelbrot dan Julia dikira dengan berulang berulang formula sederhana, dalam kes kita z ^ n + c. z adalah nombor kompleks yang mewakili koordinat titik pada paparan. adalah eksponen integer, jadi z ^ n sama dengan z didarab dengan sendirinya n kali, dan c adalah pemalar.

Untuk set Mandelbrot, untuk semua titik di kawasan paparan, kita menginisialisasi z hingga 0. Pemalar c diambil sama dengan nilai koordinat titik yang dipertimbangkan dan formula diulang.

Inilah aturannya: titik adalah sebahagian daripada set jika penerapan formula ini berulang-ulang tidak menyimpang (iaitu tidak membawa pengiraan ke arah bilangan besar). Secara matematik dapat ditunjukkan bahawa jika hasil rumus melebihi 2 (dalam modulus kerana kita berbicara tentang nombor kompleks) lelaran akan berbeza. Oleh itu, untuk mendapatkan warna yang cantik dengan cepat, kita menghentikan lelaran apabila modulus hasilnya melebihi 2 dan warnanya sesuai dengan bilangan lelaran tertentu. Sekiranya bilangan lelaran menjadi terlalu besar (jadi jika titiknya adalah sebahagian dari set Mandelbrot) kita berhenti setelah ambang yang ditentukan dan mengaitkan warna hitam dengan titik ini.

Set Julia dikira dengan cara yang sama tetapi pengiraannya tidak dimulakan pada 0 tetapi pada nilai koordinat titik yang dipertimbangkan dan pemalar c dipilih oleh pengguna dan tetap sama untuk keseluruhan gambar.

Itu sahaja, saya harap jelas … Penjelasan ini membantu untuk memahami dengan lebih baik arahan penggunaan yang lain.

Langkah 2: Apa yang Anda Perlu?

Apa Yang Anda Perlu?
Apa Yang Anda Perlu?
Apa Yang Anda Perlu?
Apa Yang Anda Perlu?
Apa Yang Anda Perlu?
Apa Yang Anda Perlu?
Apa Yang Anda Perlu?
Apa Yang Anda Perlu?

Bil bahan:

  • 1 papan ESP32
  • 1 paparan TFT dengan skrin sentuh dan stylus
  • 1 papan roti dan wayar

Itu sahaja. Jumlah kos di bawah 10 USD.

ESP32 Espressif adalah mikrokontroler dwi teras yang berjalan pada 240 MHz, yang menjadikannya calon yang baik untuk pengkomputeran berulang yang cepat dan kompleks. Ia mempunyai kapasiti WiFi dan Bluetooth yang tidak saya gunakan dalam projek ini.

Set arahan berukuran 32 bit. Pengkomputeran dengan pemboleh ubah 16 dan 32 bit sangat pantas yang memungkinkan pengiraan yang tepat, yang merupakan asas untuk tujuan zoom. Dalam aplikasi ini, untuk paparan 320 x 240, gambar dibuat sekitar 75, 000 piksel, yang masing-masing dikira menggunakan proses berulang yang dapat berjalan hingga 100 kali. Ini boleh menyebabkan 7, 500, 000 pengiraan kesatuan, yang masing-masing adalah eksponen, iaitu beberapa pendaraban…

Jadi kelajuan pengiraan sangat penting di sini, tetapi ketepatan adalah asas. Semakin banyak anda mengezum, semakin kecil ukuran bahagian set yang akan dipaparkan. Ini bermaksud bahawa setiap 320 x 240 piksel gambar mewakili nombor yang sangat dekat dengan jirannya. Apabila zoom meningkat, jarak ini semakin meningkat.

Tetapi gambar fraktal mempunyai sifat ini sehingga tidak berubah dengan penskalaan. Oleh itu, butiran kecil muncul di mana-mana sahaja dan untuk sebarang faktor skala. Bentuk utama dari set Mandelbrot, seperti yang terlihat pada layar pada gambar di atas, dapat ditemukan di tempat lain dalam versi yang jauh lebih kecil, dan ditampilkan jika anda cukup dekat (lihat pada video). Tetapi jika perbezaan koordinat antara dua piksel tetangga terlalu kecil untuk membolehkan ESP32 menangkap perbezaan tingkah laku mereka, kerana kekurangan ketepatan, kesan fraktal tidak dapat ditunjukkan…

Untuk mendapatkan ketepatan yang baik, kod menggunakan apungan, yang dikodkan dalam 32 bit oleh ESP32. Ini membolehkan sehingga 6 atau 7 tahap zoom. Menggunakan ketepatan berganda (64 bit) akan meningkatkan kedalaman zoom ini, dengan kos pengiraan yang lebih perlahan, sehingga masa lebih lama antara 2 gambar.

Untuk menjadikannya ketepatan berganda, ubah semua kejadian "float" menjadi "double" dalam kod dan jalankan kodnya. Saya baru-baru ini membuat versi untuk paparan yang lebih besar (HVGA 480 x 320 piksel): apungan 16 bit memerlukan 3 saat untuk memaparkan gambar, dan dua kali ganda mengambil masa antara 10 hingga 20 saat (3 hingga 6 kali lebih lama) tetapi menyokong lebih daripada 15 tahap zum. Gambar ketiga dalam bab ini menunjukkan tahap zoom 14 di bahagian paling kanan set Mandelbrot.

Cara menyambungkan paparan:

Saya menggunakan paparan SPI, dan parameternya ditetapkan dalam file User_Setup.h (dalam folder perpustakaan TFT_eSPI):

  • Pemandu: melepaskan pemandu yang betul untuk paparan anda. Milik saya adalah #define RPI_ILI9486_DRIVER
  • Nombor pin: pergi ke bahagian ESP32 fail dan pilih

    • #tentukan TFT_MISO 19
    • #tentukan TFT_MOSI 23
    • #tentukan TFT_SCLK 18
    • #tentukan TFT_CS 15 // Cip pilih pin kawalan
    • #tentukan TFT_DC 2 // Pin kawalan Perintah Data
    • #define TFT_RST 4 // Reset pin (dapat menyambung ke pin RST)
    • #tentukan TOUCH_CS 22 // Cip pilih pin (T_CS) skrin sentuh
  • Fon: tidak perlu mengubahnya
  • Pilihan lain: Saya memilih yang berikut

    • #tentukan SPI_FREQUENCY 20000000
    • #tentukan SPI_READ_FREQUENCY 20000000
    • #tentukan SPI_TOUCH_FREQUENCY 2500000

Semua baris fail lain dikomen.

Kalibrasi kapasiti sentuhan paparan

Sekiranya pemilihan bahagian layar atau butang tidak tepat, atau bahkan salah, jalankan lakaran penentukuran sentuhan dari perpustakaan TFT_eSPI dan salin / tampal ke dalam kod yang disediakannya (pastikan untuk menggunakan nilai yang betul untuk orientasi paparan, 1 atau 3 untuk landskap).

Langkah 3: Program ESP32

Program ESP32
Program ESP32
Program ESP32
Program ESP32
Program ESP32
Program ESP32

Kod tersebut dipaparkan pada layar sentuh TFT 320 x 240, dan menggunakan perpustakaan TFT_eSPI. Ia mengira set Mandelbrot dan Julia untuk beberapa nilai eksponen, dan membolehkan anda memperbesar kawasan yang menarik untuk melihat aspek fraktal (iaitu kehadiran struktur yang sama pada setiap perubahan skala).

Kod yang dilampirkan adalah versi untuk paparan 480 x 320. Dalam versi ini, anda boleh mengubah ukuran (lebar dan tinggi piksel) paparan. Perpustakaan TFT_eSPI menentukan sambungan dalam fail persediaan (dilampirkan) yang mesti dimasukkan ke dalam direktori perpustakaan.

Kodnya dimulakan dengan menunjukkan arahan operasi (lihat gambar dan video)

Sebahagian besar layar dikhaskan untuk menampilkan gambar, butang sentuh tersedia di sebelah kanan skrin:

  • R: melakukan "reset", i. e. memaparkan gambar ke skala maksimumnya,
  • U: "buat asal" membolehkan anda kembali ke langkah sebelumnya (jika kawasan yang diperbesar tidak menarik, anda boleh memilih bahagian gambar yang lain untuk diperbesar),
  • M atau J: membolehkan anda beralih dari set Mandelbrot ke set Julia dan sebaliknya.

Label beberapa kunci berubah mengikut konteks: mereka memaparkan fungsi yang akan dijalankan jika ditekan. Oleh itu, jika anda sekarang memaparkan set Mandelbrot, kekunci M / J memaparkan J kerana jika anda menekannya, anda akan memaparkan set Julia (dan sebaliknya).

Perkara yang sama berlaku untuk pilihan palet warna. Kita mulakan dengan palet hijau. Kuncinya mencadangkan palet seterusnya (yang biru). Palet adalah: merah, hijau, biru, kelabu, palet 1, palet 2 dan kembali ke merah. Dua yang terakhir adalah ujian palet pelbagai warna yang memberikan lebih banyak kontras, yang memungkinkan untuk melihat beberapa perincian dengan lebih baik.

Kunci dengan nombor membolehkan anda memilih eksponen n, dalam satu gelung dari 2 hingga 7 (dan kembali ke 2). Dengan semangat yang sama, ia memaparkan 3 jika anda berada pada usia 2…

Akhirnya, semasa memaparkan set Julia, perlu memilih nilai pemalar c: kekunci C membolehkan anda melakukan ini, terima kasih kepada pemilih (lihat gambar kedua). Nilai pemalar ini dipaparkan dengan set.

Mengklik pada gambar mengezum sekitar titik yang dipilih. Lingkaran kecil ditunjukkan pada titik yang disentuh dan sebuah segi empat tepat menyoroti zon zum yang dizum.

Gambar ke-3 menunjukkan bahawa masa pengkomputeran tetap antara 0,8 dan 1,2 saat untuk 320 x 240 piksel, yang menjadikannya selesa untuk zoom dan paparan. Ia mencapai 3 saat untuk 480 x 320 piksel, tetapi memberikan lebih banyak perincian.

Langkah 4: Beberapa Gambar Dijelaskan…

Beberapa Gambar Dijelaskan …
Beberapa Gambar Dijelaskan …
Beberapa Gambar Dijelaskan …
Beberapa Gambar Dijelaskan …
Beberapa Gambar Dijelaskan …
Beberapa Gambar Dijelaskan …

Gambar terbesar adalah set Mandelbrot yang terkenal. Nombor kompleks yang digunakan dalam gambar ini berkisar antara -2.1 hingga +0.7 dalam abses, dan -1.2 hingga 1.2 dalam ordinat. Sekiranya anda mengezum bahagian paling kiri gambar pertama ini, kemungkinan anda akhirnya mendapat gambar kedua, yang memaparkan versi yang lebih kecil dari set asal yang terdapat di hujung paling kiri set. Untuk kedua-dua gambar ini, eksponen ('n') sama dengan 2: itulah nilai yang biasanya digunakan untuk memaparkan set Mandelbrot.

Sekiranya anda menukar nilai ini menjadi 3 (hanya klik pada kekunci yang mengatakan 3), anda akan mendapat gambar ketiga. Satu perbezaan yang jelas adalah faktor simetri: n = 2 memberikan simetri paksi (iaitu set itu simetri terhadap paksi mendatar median), tetapi dengan n = 3 gambar menjadi tidak berubah dengan putaran 120 ° (sepertiga 360 °, putaran faktor simetri 3). Dan mengekalkan sifat fraktal, yang boleh anda sahkan dengan memperbesar tepi bentuk hitam.

Imej ke-4 adalah himpunan Julia yang diperoleh setelah memilih nilai pekali sama dengan 0,414 dalam abses dan 0,09 dalam ordinat. Palet merah dipilih, seperti yang dapat dilihat oleh kunci hijau di sebelah kanan (hijau, menjadi warna seterusnya yang akan dipilih). Gambar kelima memaparkan jenis Julia yang sama, yang merupakan bahagian pemalar khayalan yang lebih tinggi (0.358).

Saya harap anda akan seronok bermain dengan program ini dan anda dapat memaparkan gambar fraktal yang bagus. Jangan teragak-agak untuk meneroka set Mandelbrot dan Julia, dan bermain dengan palet: ia membantu mengenal pasti beberapa butiran yang mungkin tidak kelihatan dengan yang monokrom sederhana. Anda mungkin juga menemui beberapa pemandangan fraktal yang belum pernah dilihat oleh orang lain sebelum anda…

_

Ingin menemui lebih banyak gambar fraktal? Cuma klik di sini atau terokai seni fraktal atau bahkan fraktal ascii. Mungkin arahan ini akan membuat anda ingin membuat gambar yang hebat …

Dibuat dengan Peraduan Matematik
Dibuat dengan Peraduan Matematik
Dibuat dengan Peraduan Matematik
Dibuat dengan Peraduan Matematik

Hadiah Kedua dalam Peraduan Made with Math

Disyorkan: