Daftar Isi:

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

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

Video: Mandelbrot dan Julia Set pada ESP32: 4 Langkah (dengan Gambar)
Video: LED Matrix Display - Example 5: Fonts 2024, November
Anonim
Image
Image
Mandelbrot dan Julia Set di ESP32
Mandelbrot dan Julia Set di ESP32
Mandelbrot dan Julia Set di ESP32
Mandelbrot dan Julia Set di ESP32

Anda tentu tahu fraktal, yang paling terkenal adalah himpunan Mandelbrot.

Berikut adalah program untuk dimainkan di ESP32. Saya memilih ESP32 karena saya pikir itu akan melakukan perhitungan lebih cepat daripada Arduino standar (frekuensi clock lebih tinggi: 240 MHz): sekitar satu setengah detik untuk perhitungan dan tampilan.

Kode ditampilkan pada layar sentuh TFT 480 x 320. Ini menghitung set Mandelbrot dan Julia untuk beberapa nilai parameter, dan memungkinkan Anda memperbesar area yang diinginkan untuk melihat aspek fraktal (yaitu keberadaan struktur yang sama pada setiap perubahan skala). Tingkat zoom terbatas karena akurasi perhitungan yang terbatas, tetapi setengah lusin zoom dapat dilakukan sebelum gambar menurun.

Bersiaplah untuk menjelajahi dunia sihir fraktal…

Langkah 1: Apa itu Set Mandelbrot dan Julia?

Apa itu Set Mandelbrot dan Julia?
Apa itu Set Mandelbrot dan Julia?
Apa itu Set Mandelbrot dan Julia?
Apa itu Set Mandelbrot dan Julia?
Apa itu Set Mandelbrot dan Julia?
Apa itu Set Mandelbrot dan Julia?

Himpunan Mandelbrot dinamai Benoit Mandelbrot (1924-2010), seorang matematikawan Prancis dan Amerika yang melakukan pekerjaan pionir dalam geometri fraktal, dimulai pada akhir abad ke-19 oleh, antara lain, Peano, Sierpinski dan Julia.

Apa itu objek fraktal?

Ketidakteraturan alam, yang mungkin tampak kacau, seperti garis pantai laut, bentuk awan, pohon, sebenarnya adalah ekspresi dari geometri yang sangat kompleks pada skala yang berubah. Dalam konteks ini, gagasan dimensi pecahan menggantikan gagasan dimensi Euclidean biasa (yang selalu bilangan bulat)!

Objek fraktal sedemikian rupa sehingga setiap bagiannya identik dengan keseluruhannya (ini disebut kesamaan diri): strukturnya tidak berubah oleh perubahan skala.

Istilah "fraktal" adalah neologisme yang dibuat oleh Benoît Mandelbrot pada tahun 1974 dari akar kata Latin fractus, yang berarti "rusak", "tidak teratur". Ini adalah kata benda dan kata sifat. Banyak fenomena alam - seperti garis pantai atau munculnya kubis Romanesco (lihat gambar) - memiliki perkiraan bentuk fraktal.

Karier Benoît Mandelbrot agak tidak biasa: setelah mengajar di Universitas Lille (Prancis), ia mengambil posisi di IBM di mana ia dengan cepat menjadi Anggota IBM, yang memberinya kebebasan besar untuk studi ilmiahnya. Pada awal 1980-an, setelah ia meninggalkan IBM, ia menjadi profesor di Harvard, tetapi menetap secara permanen di Yale.

Karyanya pada 1960-an dan awal 1970-an membuatnya menerbitkan artikel terkenal berjudul "Fractal Objects" di mana dia menunjukkan bahwa objek-objek ini, yang dianggap oleh sebagian besar komunitas matematika sebagai keingintahuan belaka, ditemukan di mana-mana di alam. Dia memberi banyak contoh dalam berbagai bidang seperti fisika, hidrologi, keuangan, meteorologi, geografi, geologi, metalurgi….

Apa itu himpunan Mandelbrot?

Untuk memulai, katakanlah itu adalah gambar bagus yang dihasilkan oleh sebuah program. Dan program ini cukup sederhana. Ada banyak gambar yang dihasilkan komputer dan banyak perangkat lunak komputer untuk membuatnya. Jadi apa yang istimewa dari yang satu ini? Pertama, himpunan Mandelbrot adalah subset dari rencana, kumpulan poin. Ini berisi area tetapi juga kurva halus, filamen, titik dari mana banyak cabang berasal, dan hal-hal lain. Kedua: sangat menarik dan memiliki sejarah yang sangat menarik.

Pada awal abad ke-20, matematikawan Prancis Pierre Fatou dan Gaston Julia mengembangkan subdomain matematika yang disebut dinamika holomorfik. Mereka tertarik pada fungsi tertentu, bekerja pada angka, menggunakan beberapa rumus paling sederhana yang tersedia. Bilangan yang dimaksud adalah bilangan kompleks, besaran yang diwakili oleh dua koordinat (seperti titik-titik bidang) yang disebut bagian nyata dan bagian imajiner. Mereka ditemukan pada abad ke-16 oleh ahli matematika untuk membantu menemukan akar polinomial dan solusi persamaan tetapi telah menemukan aplikasi yang luas dan mendalam dalam matematika dan ilmu fisika. Kita dapat menjumlahkan 2 bilangan kompleks, mengalikan atau membaginya, dan melakukan banyak hal lainnya. Fatou dan Julia mempelajari sifat-sifat sistem dinamis tertentu di mana bilangan kompleks bervariasi menurut aturan sederhana yang diulang-ulang: tidak perlu matematika yang rumit di sini (jadi, Anda bisa melupakan gambar pertama …). Mereka mengungkapkan kekayaan sistem ini, mendefinisikan himpunan yang sekarang disebut himpunan Julia, dan mempelajari kemiripan diri mereka, oleh karena itu aspek fraktal… tetapi kata itu tidak ada pada waktu itu karena baru ditemukan belakangan, oleh… Benoît Mandelbrot!

Setelah pekerjaan para pendiri, domain ini terlupakan. Ketika komputer tiba, mereka membantu untuk mengeksplorasi banyak fenomena matematika yang membutuhkan komputasi intensif, termasuk domain yang dibuka oleh Julia dan Fatou. Jadi, ketika Benoît Mandelbrot memutuskan untuk menggunakan komputer IBM pada 1980-an untuk mewakili himpunan matematika tertentu yang terkait dengan dinamika holomorfik., ia memperoleh gambar yang sangat menarik dan sangat menarik (gambar pertama dari bagian sebelumnya).

Apa yang dilambangkan oleh himpunan Mandelbrot? Pada dasarnya, ada sistem dinamis yang mendasari yang terkait dengan setiap titik gambar. Koordinat titik bertindak sebagai parameter yang dapat disesuaikan. Titik yang berbeda sesuai dengan set Julia yang berbeda dan tergantung pada perilakunya, kita dapat memutuskan untuk mewarnai titik dengan cara tertentu. Himpunan Mandelbrot adalah himpunan parameter yang sistem memiliki properti tertentu.

Bagaimana cara menghitung himpunan Mandelbrot dan Julia?

Kita perlu masuk ke sedikit lebih detail tentang cara menghitung set ini. Himpunan Mandelbrot dan Julia dihitung dengan iterasi berulang dari rumus sederhana, dalam kasus kami z^n+c. z adalah bilangan kompleks yang mewakili koordinat titik pada tampilan. adalah eksponen bilangan bulat, jadi z^n sama dengan z dikalikan dengan dirinya sendiri n kali, dan c adalah konstanta.

Untuk himpunan Mandelbrot, untuk semua titik di area tampilan, kami menginisialisasi z ke 0. Konstanta c diambil sama dengan nilai koordinat titik yang dipertimbangkan dan rumus diulang.

Berikut adalah aturannya: sebuah titik adalah bagian dari himpunan jika penerapan berulang dari rumus ini tidak menyimpang (yaitu tidak mengarah pada perhitungan menuju bilangan besar). Secara matematis dapat ditunjukkan bahwa jika hasil rumus melebihi 2 (dalam modulus karena kita berbicara tentang bilangan kompleks), iterasi akan menyimpang. Jadi untuk mendapatkan warna cantik dengan cepat, kami menghentikan iterasi ketika modulus hasil melebihi 2 dan warna sesuai dengan jumlah iterasi tertentu. Jika jumlah iterasi menjadi terlalu besar (jadi jika titik adalah bagian dari himpunan Mandelbrot) kita berhenti setelah ambang batas yang diberikan dan mengasosiasikan warna hitam ke titik ini.

Himpunan Julia dihitung dengan cara yang sama tetapi perhitungan tidak diinisialisasi pada 0 tetapi pada nilai koordinat titik yang dipertimbangkan dan konstanta c dipilih oleh pengguna dan tetap sama untuk seluruh gambar.

Itu saja, saya harap jelas… Penjelasan ini membantu untuk lebih memahami petunjuk penggunaan lainnya.

Langkah 2: Apa yang Anda Butuhkan?

Apa yang kamu butuhkan?
Apa yang kamu butuhkan?
Apa yang kamu butuhkan?
Apa yang kamu butuhkan?
Apa yang kamu butuhkan?
Apa yang kamu butuhkan?
Apa yang kamu butuhkan?
Apa yang kamu butuhkan?

Daftar bahan:

  • 1 papan ESP32
  • 1 layar TFT dengan layar sentuh dan stylus
  • 1 papan tempat memotong roti dan kabel

Itu dia. Total biaya di bawah 10 USD.

ESP32 Espressif adalah mikrokontroler inti ganda yang berjalan pada 240 MHz, yang menjadikannya kandidat yang baik untuk komputasi berulang yang cepat dan kompleks. Ini memiliki kapasitas WiFi dan Bluetooth yang tidak saya gunakan dalam proyek ini.

Set instruksi berukuran 32 bit. Komputasi dengan variabel 16 dan 32 bit sangat cepat yang memungkinkan perhitungan akurat, yang merupakan dasar untuk tujuan pembesaran. Dalam aplikasi ini, untuk tampilan 320 x 240, sebuah gambar secara kasar dibuat dari 75.000 piksel, yang masing-masing dihitung menggunakan proses berulang yang dapat berjalan hingga 100 kali. Hal ini dapat menyebabkan 7.500.000 kalkulasi kesatuan, yang masing-masing merupakan eksponensial, yaitu beberapa perkalian…

Jadi kecepatan komputasi sangat penting di sini, tetapi akurasi sangat penting. Semakin banyak Anda memperbesar, semakin kecil ukuran porsi set yang akan ditampilkan. Ini berarti bahwa setiap 320 x 240 piksel gambar mewakili angka yang sangat dekat dengan tetangganya. Saat zoom meningkat, kedekatan ini meningkat.

Tetapi gambar fraktal memiliki properti ini sehingga mereka tetap tidak berubah dengan penskalaan. Jadi detail kecil muncul di mana-mana dan untuk faktor penskalaan apa pun. Bentuk utama dari himpunan Mandelbrot, seperti yang terlihat pada tampilan pada gambar di atas, dapat ditemukan di tempat lain dalam versi yang jauh lebih kecil, dan ditampilkan jika Anda memperbesar cukup dekat (lihat di video). Tetapi jika perbedaan koordinat antara dua piksel tetangga terlalu kecil untuk memungkinkan ESP32 menangkap perbedaan perilakunya, karena kurangnya akurasi, efek fraktal tidak dapat ditampilkan…

Untuk mendapatkan presisi yang baik, kode tersebut menggunakan float, yang dikodekan dalam 32 bit oleh ESP32. Ini memungkinkan hingga 6 atau 7 tingkat pembesaran. Menggunakan presisi ganda (64 bit) akan meningkatkan kedalaman zoom ini, dengan biaya komputasi yang lebih lambat, sehingga waktu yang lebih lama antara 2 gambar.

Untuk membuatnya presisi ganda, cukup ubah semua kemunculan "float" menjadi "double" dalam kode dan jalankan kode. Saya baru-baru ini membuat versi untuk tampilan yang lebih besar (HVGA 480 x 320 piksel): pelampung 16 bit membutuhkan 3 detik untuk menampilkan gambar, dan menggandakan membutuhkan waktu antara 10 dan 20 detik (3 hingga 6 kali lebih lama) tetapi mendukung lebih dari 15 tingkat zoom. Gambar ketiga dalam bab ini menunjukkan tingkat zoom 14 di bagian paling kanan dari himpunan Mandelbrot.

Bagaimana menghubungkan layar:

Saya menggunakan tampilan SPI, dan parameter diatur dalam file User_Setup.h (di folder perpustakaan TFT_eSPI):

  • Driver: batalkan komentar pada driver yang benar untuk tampilan Anda. Milik saya adalah #define RPI_ILI9486_DRIVER
  • Nomor pin: buka bagian ESP32 dari file dan pilih

    • #menentukan TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Pin kontrol pemilihan chip
    • #define TFT_DC 2 // Pin kontrol Perintah Data
    • #define TFT_RST 4 // Reset pin (bisa terhubung ke pin RST)
    • #define TOUCH_CS 22 // Pin pilih chip (T_CS) dari layar sentuh
  • Font: tidak perlu mengubahnya
  • Opsi lain: Saya memilih yang berikut

    • #define SPI_FREQUENCY 20000000
    • #define SPI_READ_FREQUENCY 20000000
    • #define SPI_TOUCH_FREQUENCY 2500000

Semua baris file lainnya dikomentari.

Kalibrasi kapasitas sentuh layar

Jika pemilihan bagian layar atau tombol tidak akurat, atau bahkan benar-benar salah, jalankan sketsa kalibrasi sentuh dari perpustakaan TFT_eSPI dan salin / tempel ke dalam kode larik yang disediakannya (pastikan untuk menggunakan nilai yang benar untuk orientasi tampilan, 1 atau 3 untuk lanskap).

Langkah 3: Program ESP32

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

Kode ditampilkan pada layar sentuh TFT 320 x 240, dan menggunakan pustaka TFT_eSPI. Ini menghitung set Mandelbrot dan Julia untuk beberapa nilai eksponen, dan memungkinkan Anda memperbesar area yang diinginkan untuk melihat aspek fraktal (yaitu keberadaan struktur yang sama pada setiap perubahan skala).

Kode terlampir adalah versi untuk tampilan 480 x 320. Dalam versi ini, Anda dapat mengubah ukuran (lebar dan tinggi dalam piksel) tampilan. Pustaka TFT_eSPI mendefinisikan koneksi dalam file setup (terlampir) yang harus diletakkan di direktori pustaka.

Kode dimulai dengan menampilkan petunjuk pengoperasian (lihat gambar dan video)

Sebagian besar layar dicadangkan untuk menampilkan gambar, tombol sentuh tersedia di sisi kanan layar:

  • R: melakukan "reset", mis. e. menampilkan gambar ke skala maksimumnya,
  • U: "undo" memungkinkan Anda untuk kembali ke langkah sebelumnya (jika wilayah yang diperbesar tidak menarik, Anda dapat memilih bagian lain dari gambar untuk memperbesar),
  • M atau J: memungkinkan Anda untuk beralih dari himpunan Mandelbrot ke himpunan Julia dan sebaliknya.

Label beberapa tombol berubah sesuai dengan konteksnya: mereka menampilkan fungsi yang akan dijalankan jika ditekan. Jadi jika saat ini Anda menampilkan himpunan Mandelbrot, tombol M/J menampilkan J karena jika Anda menekannya, Anda akan menampilkan himpunan Julia (dan sebaliknya).

Hal yang sama berlaku untuk pilihan palet warna. Kita mulai dengan palet hijau. Kuncinya mengusulkan palet berikutnya (yang biru). Paletnya adalah: merah, hijau, biru, abu-abu, palet 1, palet 2 dan kembali ke merah. Dua yang terakhir adalah tes palet warna-warni yang memberikan lebih banyak kontras, memungkinkan untuk melihat beberapa detail dengan lebih baik.

Kunci dengan angka memungkinkan Anda untuk memilih eksponen n, dalam satu lingkaran dari 2 hingga 7 (dan kembali ke 2). Dengan semangat yang sama, ini akan menampilkan 3 jika Anda saat ini berada di 2…

Akhirnya, saat menampilkan set Julia, perlu untuk memilih nilai konstanta c: tombol C memungkinkan Anda melakukan ini, berkat pemilih (lihat gambar kedua). Nilai konstanta ini ditampilkan dengan set.

Mengklik pada gambar memperbesar sekitar titik yang dipilih. Lingkaran kecil ditampilkan pada titik yang disentuh dan persegi panjang menyoroti zona yang diperbesar dari himpunan.

Gambar ke-3 menunjukkan bahwa waktu komputasi tetap antara 0,8 dan 1,2 detik untuk 320 x 240 piksel, yang membuatnya nyaman untuk diperbesar dan ditampilkan. Ini mencapai 3 detik untuk 480 x 320 piksel, tetapi memberikan lebih banyak detail.

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 himpunan Mandelbrot yang terkenal. Bilangan kompleks yang digunakan dalam gambar ini berkisar dari -2,1 hingga +0,7 dalam absis, dan -1,2 hingga 1,2 dalam ordinat. Jika Anda memperbesar bagian paling kiri dari gambar pertama ini, kemungkinan Anda akhirnya mendapatkan yang kedua, yang menampilkan versi yang lebih kecil dari set asli yang ditemukan di ujung paling kiri dari set. Untuk kedua gambar ini, eksponen ('n') sama dengan 2: itulah nilai yang biasanya digunakan untuk menampilkan kumpulan Mandelbrot.

Jika Anda mengubah nilai ini menjadi 3 (cukup klik pada tombol yang mengatakan 3), Anda mendapatkan gambar ketiga. Satu perbedaan yang jelas adalah faktor simetri: n=2 memberikan simetri aksial (yaitu himpunan simetris terhadap median sumbu horizontal), tetapi dengan n=3 gambar menjadi invarian dengan rotasi 120° (sepertiga dari 360°, rotasi faktor simetri 3). Dan ia mempertahankan sifat fraktalnya, yang dapat Anda verifikasi dengan memperbesar tepi bentuk hitam.

Gambar ke-4 adalah himpunan Julia yang diperoleh setelah memilih nilai koefisien yang sama dengan 0,414 pada absis dan 0,09 pada ordinat. Palet merah dipilih, seperti yang dapat dilihat oleh tombol hijau di sebelah kanan (hijau, menjadi warna berikutnya yang akan dipilih). Gambar kelima menampilkan jenis set Julia yang sama, yang merupakan bagian imajiner yang lebih tinggi dari konstanta (0,358).

Saya harap Anda akan menikmati bermain dengan program ini dan Anda akan dapat menampilkan gambar fraktal yang bagus. Jangan ragu untuk menjelajahi set Mandelbrot dan Julia, dan bermain dengan palet: mereka membantu mengidentifikasi beberapa detail yang mungkin tidak terlihat dengan yang monokrom sederhana. Anda bahkan dapat menemukan beberapa lanskap fraktal yang belum pernah dilihat siapa pun sebelum Anda…

_

Ingin menemukan lebih banyak gambar fraktal? Cukup klik di sini atau jelajahi seni fraktal atau bahkan fraktal ascii. Mungkin instruksi ini akan membuat Anda ingin membuat gambar yang luar biasa…

Dibuat dengan Lomba Matematika
Dibuat dengan Lomba Matematika
Dibuat dengan Lomba Matematika
Dibuat dengan Lomba Matematika

Juara II Lomba Made with Math

Direkomendasikan: