Taula de continguts:
- Pas 1: què són els conjunts Mandelbrot i Julia?
- Pas 2: què necessiteu?
- Pas 3: programa ESP32
- Pas 4: Algunes imatges explicades …
Vídeo: Mandelbrot i Julia configuren ESP32: 4 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Segur que coneixeu els fractals, el més famós dels quals és el conjunt Mandelbrot.
Aquí teniu un programa per jugar a ESP32. Vaig triar l’ESP32 perquè crec que farà els càlculs més ràpid que un Arduino estàndard (freqüència de rellotge superior: 240 MHz): aproximadament d’un segon a un segon i mig per al càlcul i la visualització.
El codi es mostra en una pantalla tàctil TFT de 480 x 320. Calcula conjunts de Mandelbrot i Julia per a diversos valors de paràmetres i us permet ampliar les zones d’interès per veure l’aspecte fractal (és a dir, la presència de les mateixes estructures a cada canvi d’escala). El nivell de zoom és limitat a causa de la precisió limitada dels càlculs, però es pot fer mitja dotzena de zoom abans que la imatge es degradi.
Prepareu-vos per explorar el món màgic dels fractals …
Pas 1: què són els conjunts Mandelbrot i Julia?
El conjunt Mandelbrot porta el nom de Benoit Mandelbrot (1924-2010), un matemàtic francès i nord-americà que va fer treballs de pionera en geometria fractal, iniciat a finals del segle XIX per, entre d’altres, Peano, Sierpinski i Julia.
Què són els objectes fractals?
Les irregularitats de la natura, que poden semblar caòtiques, com la línia de la costa marítima, la forma dels núvols, un arbre, són de fet l’expressió d’una geometria molt complexa a escala canviant. En aquest context, la noció de dimensió fraccionada substitueix la de la dimensió euclidiana habitual (que sempre és un nombre enter).
Un objecte fractal és tal que qualsevol porció d’ell és idèntica a la totalitat (això s’anomena auto-semblança): la seva estructura és invariable pel canvi d’escala.
El terme "fractal" és un neologisme creat per Benoît Mandelbrot el 1974 a partir de l'arrel llatina fractus, que significa "trencat", "irregular". És alhora un substantiu i un adjectiu. Molts fenòmens naturals, com el contorn de les costes o l’aparició de col romànica (vegeu la imatge), tenen formes fractals aproximades.
La de Benoît Mandelbrot va tenir una carrera una mica atípica: després d’ensenyar a la Universitat de Lille (França), va ocupar un lloc a IBM on es va convertir ràpidament en membre d’IBM, cosa que li va donar una gran llibertat per als seus estudis científics. A principis dels vuitanta, després de deixar IBM, es va convertir en professor a Harvard, però es va establir definitivament a Yale.
El seu treball als anys seixanta i principis dels setanta el va portar a publicar un famós article titulat "Objectes fractals" en què mostrava que aquests objectes, considerats per una gran part de la comunitat matemàtica com a meres curiositats, es trobaven a tot arreu a la natura. Va donar molts exemples en una àmplia varietat de camps com la física, la hidrologia, les finances, la meteorologia, la geografia, la geologia, la metal·lúrgia …
Què és el conjunt Mandelbrot?
Per començar, diguem que és un bonic dibuix generat per un programa. I aquest programa és molt senzill: hi ha molts dibuixos generats per ordinador i molts programes informàtics per generar-los. Llavors, què té d’especial aquest? En primer lloc, el conjunt Mandelbrot és un subconjunt del pla, una col·lecció de punts. Conté zones, però també corbes suaus, filaments, punts dels quals emanen múltiples branques i altres coses. Segon: és realment fascinant i té una història molt interessant.
A principis del segle XX, els matemàtics francesos Pierre Fatou i Gaston Julia van desenvolupar un subdomini de matemàtiques anomenat dinàmica holomorfa. Estaven interessats en funcions particulars, actuant sobre els números, utilitzant algunes de les fórmules més senzilles disponibles. Els nombres en qüestió són nombres complexos, quantitats representades per dues coordenades (igual que els punts d’un pla) anomenades parts reals i imaginàries. Van ser inventats al segle XVI per matemàtics per ajudar a trobar les arrels dels polinomis i la solució d’equacions, però han trobat aplicacions àmplies i profundes en matemàtiques i ciències físiques. Podem afegir 2 nombres complexos, multiplicar-los o dividir-los i fer moltes altres coses. Fatou i Julia van estudiar les propietats de determinats sistemes dinàmics en què un nombre complex varia segons una regla simple repetida una i altra vegada: aquí no cal matemàtiques complicades (així, podeu oblidar la primera imatge …). Van revelar la riquesa d'aquests sistemes, van definir els conjunts que ara es diuen conjunts de Julia i van estudiar la seva auto-semblança, per tant, aspecte fractal … però la paraula no existia en aquell moment perquè només va ser inventada molt més tard per … Benoît Mandelbrot!
Després del treball dels fundadors, aquest domini va caure en l’oblit. Quan van arribar els ordinadors, van ajudar a explorar molts fenòmens matemàtics que requereixen una computació intensiva, inclòs el domini obert per Julia i Fatou. Així, quan Benoît Mandelbrot va decidir utilitzar ordinadors IBM als anys vuitanta per representar un determinat conjunt matemàtic relacionat amb la dinàmica holomorfa., va obtenir un dibuix molt atractiu i molt intrigant (primera imatge de la secció anterior).
Què representa el conjunt Mandelbrot? Bàsicament, hi ha un sistema dinàmic subjacent associat a cada punt de la imatge. Les coordenades del punt actuen com un paràmetre ajustable. Diferents punts corresponen a diferents conjunts de Julia i, segons el seu comportament, podem decidir acolorir el punt d’una manera particular. El conjunt Mandelbrot és el conjunt de paràmetres per als quals el sistema té una propietat determinada.
Com es calculen els conjunts Mandelbrot i Julia?
Hem d’entrar en una mica més de detalls sobre com calcular aquests conjunts. Els conjunts de Mandelbrot i Julia es calculen mitjançant la iteració repetida d’una fórmula simple, en el nostre cas z ^ n + c. z és un nombre complex que representa les coordenades d'un punt de la pantalla. és un exponent sencer, de manera que z ^ n és igual a z multiplicat per si mateix n vegades, i c és una constant.
Per al conjunt de Mandelbrot, per a tots els punts de l'àrea de visualització, inicialitzem z a 0. La constant c es pren igual al valor de les coordenades del punt considerat i es itera la fórmula.
Heus aquí la regla: un punt forma part del conjunt si l’aplicació repetida d’aquesta fórmula no difereix (és a dir, no condueix a càlculs cap a grans quantitats). Es pot demostrar matemàticament que si el resultat de la fórmula supera 2 (en mòdul ja que parlem de nombres complexos) la iteració divergirà. Així, per obtenir ràpidament colors bonics, parem la iteració quan el mòdul del resultat supera 2 i el color correspon al nombre d’aquesta iteració en particular. Si el nombre d'iteracions es fa massa gran (per tant, si el punt forma part del conjunt de Mandelbrot) ens aturem després d'un determinat llindar i assocem el color negre a aquest punt.
El conjunt de Julia es calcula de manera similar, però els càlculs no s’inicialitzen a 0 sinó al valor de les coordenades del punt considerat i la constant c és escollida per l’usuari i continua sent la mateixa per a tota la imatge.
Ja està, espero que sigui clar … Aquestes explicacions ajuden a entendre millor la resta d'instruccions d'ús.
Pas 2: què necessiteu?
Llista de materials:
- 1 tauler ESP32
- 1 pantalla TFT amb pantalla tàctil i llapis òptic
- 1 taulell de connexió i cables
Això és. Cost total inferior a 10 USD.
L’ES32 d’Espressif és un microcontrolador de doble nucli que funciona a 240 MHz, cosa que el converteix en un bon candidat per a una computació repetitiva ràpida i complexa. Té capacitats WiFi i Bluetooth que no faig servir en aquest projecte.
El conjunt d'instruccions té una mida de 32 bits. La computació amb variables de 16 i 32 bits és molt ràpida, cosa que permet realitzar càlculs precisos, cosa fonamental per fer zoom. En aquesta aplicació, per a una pantalla de 320 x 240, es fa aproximadament una imatge de 75.000 píxels, cadascun dels quals es calcula mitjançant un procés iteratiu que pot executar-se fins a 100 vegades. Això pot conduir a 7, 500, 000 càlculs unitaris, cadascun dels quals és una exponentiació, és a dir, diverses multiplicacions …
Per tant, la velocitat de càlcul és fonamental aquí, però la precisió és fonamental. Com més amplieu, més petita serà la mida de la porció del conjunt que es mostrarà. Això significa que cadascun dels 320 x 240 píxels de la imatge representa un nombre molt proper als seus veïns. A mesura que augmenta el zoom, aquesta proximitat augmenta.
Però les imatges fractals tenen aquesta propietat que es mantenen inalterades mitjançant l’escala. Així, apareixen petits detalls a tot arreu i per a qualsevol factor d’escala. La forma principal del conjunt Mandelbrot, tal com es veu a la pantalla de la imatge superior, es pot trobar en un altre lloc en una versió molt més petita i es pot visualitzar si feu un zoom prou proper (vegeu el vídeo). Però si la diferència de coordenades entre dos píxels veïns és massa petita per permetre a l’ESP32 captar la seva diferència de comportament, a causa de la falta de precisió, no es pot mostrar l’efecte fractal …
Per obtenir una bona precisió, el codi utilitza flotants, que són codificats en 32 bits per l’ESP32. Això permet fins a 6 o 7 nivells de zoom. L'ús de doble precisió (64 bits) hauria augmentat aquesta profunditat de zoom, a costa de càlculs més lents, per tant temps més llargs entre 2 imatges.
Per fer-la doble precisió, només cal canviar totes les aparicions de "float" a "doble" al codi i executar el codi. Recentment he creat una versió per a una pantalla més gran (HVGA 480 x 320 píxels): els flotadors de 16 bits triguen 3 segons a mostrar la imatge i els dobles triguen entre 10 i 20 segons (de 3 a 6 vegades més), però admeten més de 15 nivells de zoom. La tercera imatge d’aquest capítol mostra el nivell de zoom 14 a la part més dreta del conjunt Mandelbrot.
Com connectar la pantalla:
He utilitzat una pantalla SPI i els paràmetres es defineixen al fitxer User_Setup.h (a la carpeta de la biblioteca TFT_eSPI):
- Controlador: descomenteu el controlador correcte per a la pantalla. El meu era #define RPI_ILI9486_DRIVER
-
Números de pin: aneu a la secció ESP32 del fitxer i trieu
- #define TFT_MISO 19
- #define TFT_MOSI 23
- #define TFT_SCLK 18
- #define TFT_CS 15 // Pin de control de selecció de xip
- #define TFT_DC 2 // Pin de control de l'ordre de dades
- #define TFT_RST 4 // Restableix el pin (es podria connectar al pin RST)
- #define TOUCH_CS 22 // Pin de selecció de xip (T_CS) de la pantalla tàctil
- Tipus de lletra: no cal canviar-los
-
Altres opcions: he seleccionat les següents
- #define SPI_FREQUENCY 20000000
- #define SPI_READ_FREQUENCY 20000000
- #define SPI_TOUCH_FREQUENCY 2500000
Es comenten totes les altres línies del fitxer.
Calibra la capacitat tàctil de la pantalla
Si la selecció d'una porció de pantalla o d'un botó no és exacta, ni tan sols és totalment incorrecta, executeu l'esbós de calibratge tàctil des de la biblioteca TFT_eSPI i copieu / enganxeu al codi de la matriu que proporciona (assegureu-vos d'utilitzar el valor correcte per a l'orientació de la pantalla), 1 o 3 per al paisatge).
Pas 3: programa ESP32
El codi es mostra en una pantalla tàctil TFT de 320 x 240 i utilitza la biblioteca TFT_eSPI. Calcula conjunts de Mandelbrot i Julia per a diversos valors d’exponent i us permet ampliar les zones d’interès per veure l’aspecte fractal (és a dir, la presència de les mateixes estructures a cada canvi d’escala).
El codi adjunt és una versió per a pantalla de 480 x 320. En aquesta versió, podeu canviar la mida (amplada i alçada en píxels) de la pantalla. La biblioteca TFT_eSPI defineix les connexions en un fitxer de configuració (adjunt) que s’ha de posar al directori de la biblioteca.
El codi comença mostrant les instruccions de funcionament (veure imatge i vídeo)
La major part de la pantalla està reservada per mostrar imatges; hi ha botons tàctils disponibles a la part dreta de la pantalla:
- R: realitza un "restabliment", i. e. mostra la imatge a la seva escala màxima,
- U: "desfer" us permet tornar al pas anterior (si la regió ampliada no és interessant, podeu triar una altra part de la imatge per apropar-la),
- M o J: permet canviar del conjunt de Mandelbrot al conjunt de Julia i viceversa.
Les etiquetes d'algunes tecles canvien segons el context: mostren la funció que s'executarà si es prem. Per tant, si actualment es mostra el conjunt Mandelbrot, la tecla M / J mostra J ja que si es prem, es mostrarà el conjunt de Julia (i viceversa).
El mateix s'aplica a l'elecció de la paleta de colors. Comencem per la paleta verda. La tecla proposa la següent paleta (la blava). Les paletes són: vermell, verd, blau, gris, paleta 1, paleta 2 i tornar al vermell. Els dos darrers són proves de paletes multicolors que proporcionen més contrast, permetent veure millor alguns detalls.
La tecla amb un número us permet triar l’exponent n, en un bucle del 2 al 7 (i de nou al 2). Amb el mateix esperit, en mostra 3 si actualment sou a 2 …
Finalment, quan es mostra el conjunt de Julia, cal escollir el valor de la constant c: la tecla C permet fer-ho, gràcies a un selector (veure segona imatge). El valor d'aquesta constant es mostra amb el conjunt.
En fer clic a la imatge, s’acosta al punt seleccionat. Es mostra un petit cercle al punt tocat i un rectangle ressalta la zona de zoom del conjunt.
La tercera imatge mostra que els temps de càlcul es mantenen entre 0,8 i 1,2 segons per a 320 x 240 píxels, cosa que facilita el zoom i la visualització. Arriba als 3 segons per a 480 x 320 píxels, però proporciona més detalls.
Pas 4: Algunes imatges explicades …
La imatge més gran és el conegut conjunt Mandelbrot. Els nombres complexos utilitzats en aquesta imatge oscil·len entre -2,1 i +0,7 en abscisses i -1,2 i 1,2 en ordenades. Si amplieu la part molt esquerra d’aquesta primera imatge, és probable que finalment obtingueu la segona, que mostra una versió més petita del conjunt original que es troba a la punta més esquerra del conjunt. Per a aquestes dues imatges, l'exponent ('n') és igual a 2: aquest és el valor que s'utilitza normalment per mostrar els conjunts de Mandelbrot.
Si canvieu aquest valor a 3 (només cal que feu clic a la tecla que diu 3), obtindreu la tercera imatge. Una diferència òbvia és el factor de simetria: n = 2 dóna una simetria axial (és a dir, el conjunt és simètric contra l’eix horitzontal mitjà), però amb n = 3 la imatge es torna invariant mitjançant una rotació de 120 ° (un terç de 360 °, rotació factor de simetria de 3). I conserva les seves propietats fractals, que podeu verificar ampliant les vores de la forma negra.
La quarta imatge és un conjunt de Julia obtingut després de seleccionar un valor de coeficient igual a 0,414 en abscisses i 0,09 en ordenada. Es tria la paleta vermella, com es pot veure amb la tecla verda de la dreta (el verd és el següent color a escollir). La cinquena imatge mostra el mateix tipus de conjunt de Julia, que és una part imaginària superior de la constant (0,358).
Espero que us agradi jugar amb aquest programa i que pugueu mostrar bones fotos fractals. No dubteu a explorar els conjunts Mandelbrot i Julia i jugar amb les paletes: ajuden a identificar alguns detalls que poden no ser visibles amb els simples monocroms. Fins i tot podeu descobrir alguns paisatges fractals que ningú no ha vist mai abans …
_
Voleu descobrir més imatges fractals? Feu clic aquí o exploreu l'art fractal o fins i tot el fractal ascii. Potser aquest instructiu us donarà ganes de crear imatges tan fantàstiques …
Accèssit al concurs Made with Math
Recomanat:
Llum (s) LED amb bateria amb càrrega solar: 11 passos (amb imatges)
Llums LED amb bateria amb càrrega solar: la meva dona ensenya a la gent a fer sabó, la majoria de les seves classes eren al vespre i aquí a l’hivern es fa fosc cap a les 4:30 de la tarda, alguns dels seus alumnes tenien problemes per trobar el nostre casa. Teníem un rètol frontal però fins i tot amb un lligam al carrer
Porta imatges amb altaveu incorporat: 7 passos (amb imatges)
Suport d'imatges amb altaveu incorporat: aquí teniu un gran projecte per dur a terme durant el cap de setmana, si voleu que us poseu un altaveu que pugui contenir imatges / postals o fins i tot la vostra llista de tasques. Com a part de la construcció, utilitzarem un Raspberry Pi Zero W com a centre del projecte i un
Reconeixement d'imatges amb plaques K210 i Arduino IDE / Micropython: 6 passos (amb imatges)
Reconeixement d’imatges amb plaques K210 i Arduino IDE / Micropython: ja vaig escriure un article sobre com executar demostracions d’OpenMV a Sipeed Maix Bit i també vaig fer un vídeo de demostració de detecció d’objectes amb aquesta placa. Una de les moltes preguntes que la gent ha formulat és: com puc reconèixer un objecte que la xarxa neuronal no és tr
Gesture Hawk: robot controlat amb gestos manuals mitjançant la interfície basada en el processament d’imatges: 13 passos (amb imatges)
Gesture Hawk: robot controlat amb gestos manuals mitjançant interfície basada en el processament d’imatges: Gesture Hawk es va mostrar a TechEvince 4.0 com una interfície simple màquina basada en el processament d’imatges. La seva utilitat rau en el fet que no es requereixen cap sensor addicional ni un dispositiu portàtil, excepte un guant, per controlar el cotxe robòtic que funciona amb diferents
Com desmuntar un ordinador amb passos i imatges senzills: 13 passos (amb imatges)
Com desmuntar un ordinador amb passos i imatges senzills: és una instrucció sobre com desmuntar un ordinador. La majoria dels components bàsics són modulars i fàcilment eliminables. Tanmateix, és important que us organitzeu al respecte. Això us ajudarà a evitar la pèrdua de peces i també a fer el muntatge