Оглавление:

Наборы Мандельброта и Джулии на ESP32: 4 шага (с изображениями)
Наборы Мандельброта и Джулии на ESP32: 4 шага (с изображениями)

Видео: Наборы Мандельброта и Джулии на ESP32: 4 шага (с изображениями)

Видео: Наборы Мандельброта и Джулии на ESP32: 4 шага (с изображениями)
Видео: µ-Spec MkII — мультисенсорный измерительный блок: спектрометр, 2D-лидар, тепловая камера, анализатор спектра 2024, Июль
Anonim
Image
Image
Наборы Мандельброта и Жюлиа на ESP32
Наборы Мандельброта и Жюлиа на ESP32
Наборы Мандельброта и Жюлиа на ESP32
Наборы Мандельброта и Жюлиа на ESP32

Вы наверняка знаете фракталы, самый известный из которых - множество Мандельброта.

Вот программа для игры на ESP32. Я выбрал ESP32, потому что думаю, что он будет выполнять вычисления быстрее, чем стандартный Arduino (более высокая тактовая частота: 240 МГц): от секунды до полутора секунд для расчета и отображения.

Код отображается на сенсорном TFT-экране 480 x 320 пикселей. Он вычисляет наборы Мандельброта и Жюлиа для нескольких значений параметров и позволяет увеличивать интересующие области, чтобы увидеть фрактальный аспект (то есть наличие одинаковых структур при каждом изменении масштаба). Уровень масштабирования ограничен из-за ограниченной точности расчетов, но можно сделать полдюжины масштабов, прежде чем изображение ухудшится.

Приготовьтесь исследовать волшебный мир фракталов…

Шаг 1. Что такое множества Мандельброта и Жюлиа?

Что такое множества Мандельброта и Жюлиа?
Что такое множества Мандельброта и Жюлиа?
Что такое множества Мандельброта и Жюлиа?
Что такое множества Мандельброта и Жюлиа?
Что такое множества Мандельброта и Жюлиа?
Что такое множества Мандельброта и Жюлиа?

Множество Мандельброта названо в честь Бенуа Мандельброта (1924-2010), французского и американского математика, который проделал пионерскую работу по фрактальной геометрии, начатую в конце 19 века, в частности, Пеано, Серпински и Джулией.

Что такое фрактальные объекты?

Неровности природы, которые могут показаться хаотичными, такие как линия морского побережья, форма облаков, дерево, на самом деле являются выражением очень сложной геометрии в изменяющемся масштабе. В этом контексте понятие дробной размерности заменяет обычное евклидово измерение (которое всегда является целым числом)!

Фрактальный объект таков, что любая его часть идентична целому (это называется самоподобием): его структура неизменна при изменении масштаба.

Термин «фрактал» - это неологизм, созданный Бенуа Мандельбротом в 1974 году от латинского корня «фрактус», что означает «сломанный», «неправильный». Это одновременно существительное и прилагательное. Многие природные явления - например, очертания береговой линии или появление капусты Романеско (см. Рисунок) - имеют приблизительные фрактальные формы.

У Бенуа Мандельброта была несколько нетипичная карьера: после преподавания в Университете Лилля (Франция) он поступил на работу в IBM, где быстро стал научным сотрудником IBM, что дало ему большую свободу для его научных исследований. В начале 1980-х, после того, как он покинул IBM, он стал профессором Гарварда, но навсегда поселился в Йельском университете.

Его работа в 1960-х и начале 1970-х годов побудила его опубликовать знаменитую статью под названием «Фрактальные объекты», в которой он показал, что эти объекты, рассматриваемые значительной частью математического сообщества как простые диковинки, встречаются в природе повсюду. Он привел множество примеров в самых разных областях, таких как физика, гидрология, финансы, метеорология, география, геология, металлургия….

Что такое множество Мандельброта?

Для начала предположим, что это красивый рисунок, созданный программой. И эта программа довольно проста: существует множество компьютерных чертежей и множество компьютерных программ для их создания. Так что же такого особенного в этом? Во-первых, множество Мандельброта - это подмножество плана, набор точек. Он содержит области, а также плавные кривые, нити, точки, из которых исходят множественные ответвления, и многое другое. Во-вторых: это действительно увлекательно и имеет очень интересную историю.

В начале 20 века французские математики Пьер Фату и Гастон Жюлиа разработали подобласть математики, называемую голоморфной динамикой. Их интересовали конкретные функции, действующие на числа, используя некоторые из простейших доступных формул. Рассматриваемые числа являются комплексными числами, величинами, представленными двумя координатами (точно так же, как точки на плоскости), называемыми действительной и мнимой частями. Они были изобретены в 16 веке математиками, чтобы помочь найти корни многочленов и решение уравнений, но нашли широкое и глубокое применение в математике и физических науках. Мы можем сложить 2 комплексных числа, умножить или разделить их и многое другое. Фату и Джулия изучали свойства некоторых динамических систем, в которых комплексное число изменяется в соответствии с простым правилом, повторяемым снова и снова: здесь нет необходимости в сложных математических вычислениях. (так что вы можете забыть первое изображение…). Они раскрыли богатство этих систем, определили множества, которые теперь называются множествами Жюлиа, и изучили их самоподобие, следовательно, фрактальный аспект … но этого слова в то время не существовало, потому что оно было изобретено намного позже … Бенуа Мандельброт!

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

Что представляет собой множество Мандельброта? По сути, с каждой точкой изображения связана базовая динамическая система. Координаты точки действуют как регулируемый параметр. Разные точки соответствуют разным наборам Джулии, и в зависимости от их поведения мы можем решить раскрасить точку определенным образом. Набор Мандельброта - это набор параметров, для которых система имеет определенное свойство.

Как вычислить множества Мандельброта и Жюлиа?

Нам нужно более подробно рассказать о том, как рассчитать эти наборы. Множества Мандельброта и Жюлиа вычисляются путем повторения простой формулы, в нашем случае z ^ n + c. z - комплексное число, представляющее координаты точки на дисплее. - целочисленная экспонента, поэтому z ^ n равно z, умноженному на себя n раз, а c - константа.

Для набора Мандельброта для всех точек в области отображения мы инициализируем z равным 0. Константа c берется равной значению координат рассматриваемой точки, и формула повторяется.

Вот правило: точка является частью множества, если повторное применение этой формулы не расходится (т.е.не приводит к вычислениям в сторону больших чисел). Математически можно показать, что если результат формулы превышает 2 (по модулю, поскольку мы говорим о комплексных числах), итерация будет расходиться. Поэтому, чтобы быстро получить красивые цвета, мы останавливаем итерацию, когда модуль результата превышает 2, а цвет соответствует номеру этой конкретной итерации. Если количество итераций становится слишком большим (то есть, если точка является частью набора Мандельброта), мы останавливаемся после заданного порога и связываем черный цвет с этой точкой.

Набор Жюлиа вычисляется аналогичным образом, но вычисления инициализируются не 0, а значением координат рассматриваемой точки, а константа c выбирается пользователем и остается неизменной для всего изображения.

Вот и все, надеюсь понятно… Эти пояснения помогают лучше понять остальные инструкции по эксплуатации.

Шаг 2: Что вам нужно?

Что тебе нужно?
Что тебе нужно?
Что тебе нужно?
Что тебе нужно?
Что тебе нужно?
Что тебе нужно?
Что тебе нужно?
Что тебе нужно?

Спецификация материалов:

  • 1 плата ESP32
  • 1 TFT-дисплей с сенсорным экраном и стилусом
  • 1 макет и провода

Вот и все. Общая стоимость до 10 грн.

ESP32 от Espressif - это двухъядерный микроконтроллер, работающий на частоте 240 МГц, что делает его хорошим кандидатом для быстрых и сложных повторяющихся вычислений. У него есть возможности Wi-Fi и Bluetooth, которые я не использую в этом проекте.

Набор команд имеет размер 32 бита. Вычисления с 16- и 32-битными переменными выполняются очень быстро, что позволяет проводить точные вычисления, что является основным условием масштабирования. В этом приложении для дисплея 320 x 240 изображение примерно состоит из 75 000 пикселей, каждый из которых вычисляется с использованием итеративного процесса, который может выполняться до 100 раз. Это может привести к 7 500 000 унитарных вычислений, каждое из которых является возведением в степень, то есть несколькими умножениями …

Таким образом, здесь важна скорость вычислений, но важна точность. Чем больше вы увеличиваете масштаб, тем меньше размер отображаемой части набора. Это означает, что каждый из 320 x 240 пикселей изображения представляет собой число, которое очень близко к своим соседям. По мере увеличения масштабирования эта близость увеличивается.

Но фрактальные изображения обладают тем свойством, что они остаются неизменными при масштабировании. Поэтому мелкие детали появляются везде и при любом коэффициенте масштабирования. Основная форма набора Мандельброта, показанная на дисплее на приведенном выше рисунке, может быть найдена где-то еще в гораздо меньшей версии и будет отображаться, если вы увеличите масштаб достаточно близко (см. На видео). Но если разница в координатах между двумя соседними пикселями слишком мала, чтобы позволить ESP32 уловить их разницу в поведении, из-за отсутствия точности фрактальный эффект не может быть показан …

Чтобы добиться хорошей точности, в коде используются числа с плавающей запятой, которые кодируются 32-битным кодом ESP32. Это позволяет использовать до 6 или 7 уровней масштабирования. Использование двойной точности (64 бита) увеличило бы эту глубину масштабирования за счет более медленных вычислений, что увеличило бы время между двумя изображениями.

Чтобы добиться двойной точности, просто измените все вхождения «float» на «double» в коде и запустите код. Недавно я сделал версию для большего дисплея (HVGA 480 x 320 пикселей): 16-битные поплавки занимают 3 секунды для отображения изображения, а двойные - от 10 до 20 секунд (в 3-6 раз дольше), но поддерживают более 15 уровней масштабирования.. На третьем изображении в этой главе показан уровень масштабирования 14 в самой правой части набора Мандельброта.

Как подключить дисплей:

Я использовал дисплей SPI, а параметры задаются в файле User_Setup.h (в папке библиотеки TFT_eSPI):

  • Драйвер: раскомментируйте драйвер, соответствующий вашему дисплею. Мой был #define RPI_ILI9486_DRIVER
  • Номера контактов: перейдите в раздел файла ESP32 и выберите

    • #define TFT_MISO 19
    • #define TFT_MOSI 23
    • #define TFT_SCLK 18
    • #define TFT_CS 15 // Вывод управления выбором микросхемы
    • #define TFT_DC 2 // Вывод управления командой данных
    • #define TFT_RST 4 // Сброс вывода (может подключаться к выводу RST)
    • #define TOUCH_CS 22 // Пин выбора микросхемы (T_CS) сенсорного экрана
  • Шрифты: менять их не нужно
  • Другие варианты: я выбрал следующие

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

Все остальные строки файла закомментированы.

Откалибруйте сенсорную емкость дисплея

Если выбор части экрана или кнопки неточный или даже полностью неправильный, запустите эскиз калибровки касания из библиотеки TFT_eSPI и скопируйте / вставьте в код, который он предоставляет (обязательно используйте правильное значение для ориентации дисплея, 1 или 3 для пейзажа).

Шаг 3: Программа ESP32

Программа ESP32
Программа ESP32
Программа ESP32
Программа ESP32
Программа ESP32
Программа ESP32

Код отображается на сенсорном TFT-экране 320 x 240 и использует библиотеку TFT_eSPI. Он вычисляет множества Мандельброта и Жюлиа для нескольких значений экспоненты и позволяет увеличивать интересующие области, чтобы увидеть фрактальный аспект (то есть наличие одинаковых структур при каждом изменении масштаба).

Прилагаемый код - версия для дисплея 480 x 320. В этой версии вы можете изменить размер (ширину и высоту в пикселях) дисплея. Библиотека TFT_eSPI определяет соединения в установочном файле (прикрепленном), который необходимо поместить в каталог библиотеки.

Код начинается с отображения инструкции по эксплуатации (см. Рисунок и видео)

Большая часть экрана отведена для отображения изображений, в правой части экрана доступны сенсорные кнопки:

  • R: выполняет «сброс», т.е. е. отображает изображение в максимальном масштабе,
  • U: «отменить» позволяет вернуться к предыдущему шагу (если увеличенная область не интересна, вы можете выбрать другую часть изображения для увеличения),
  • M или J: позволяет переключаться с набора Мандельброта на набор Джулии и наоборот.

Названия некоторых клавиш меняются в зависимости от контекста: они отображают функцию, которая будет выполнена при нажатии. Таким образом, если вы в настоящее время отображаете набор Мандельброта, клавиша M / J отображает J, поскольку, если вы нажмете на нее, вы отобразите набор Джулии (и наоборот).

То же касается и выбора цветовой палитры. Начнем с зеленой палитры. Ключ предлагает следующую палитру (синюю). Палитры: красный, зеленый, синий, серый, палитра 1, палитра 2 и обратно к красному. Последние два теста представляют собой разноцветные палитры, которые обеспечивают больший контраст и позволяют лучше рассмотреть некоторые детали.

Клавиша с номером позволяет выбрать показатель степени n в цикле от 2 до 7 (и обратно до 2). В том же духе отображается 3, если у вас сейчас 2…

Наконец, при отображении набора Julia необходимо выбрать значение константы c: клавиша C позволяет это сделать благодаря селектору (см. Второй рисунок). Значение этой константы отображается вместе с набором.

При нажатии на изображение масштабируется выбранная точка. Маленький кружок отображается в точке касания, а прямоугольник выделяет увеличенную зону набора.

На третьем изображении показано, что время вычислений составляет от 0,8 до 1,2 секунды для 320 x 240 пикселей, что позволяет удобно масштабировать и отображать. Он достигает 3 секунд для 480 x 320 пикселей, но обеспечивает более подробную информацию.

Шаг 4. Пояснения к некоторым изображениям…

Пояснения к некоторым изображениям…
Пояснения к некоторым изображениям…
Пояснения к некоторым изображениям…
Пояснения к некоторым изображениям…
Пояснения к некоторым изображениям…
Пояснения к некоторым изображениям…

Самая большая картина - это всем известное множество Мандельброта. Комплексные числа, используемые на этом изображении, находятся в диапазоне от -2,1 до +0,7 по абсциссе и от -1,2 до 1,2 по ординате. Если вы увеличите масштаб до самой левой части этого первого изображения, скорее всего, вы наконец получите второе, которое отображает уменьшенную версию исходного набора, найденного в самом левом конце набора. Для обоих этих изображений показатель степени ('n') равен 2: это значение, обычно используемое для отображения множеств Мандельброта.

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

Четвертое изображение представляет собой набор Джулии, полученный после выбора значения коэффициента, равного 0,414 по абсциссе и 0,09 по ординате. Выбрана красная палитра, что видно по зеленой клавише справа (зеленый - следующий цвет, который нужно выбрать). На пятом изображении показан такой же набор Джулии, который представляет собой более высокую мнимую часть константы (0,358).

Я надеюсь, что вам понравится играть с этой программой и вы сможете отображать красивые фрактальные картинки. Не стесняйтесь исследовать наборы Мандельброта и Жюлиа и поиграйте с палитрами: они помогают идентифицировать некоторые детали, которые могут быть не видны с помощью простых монохромных. Вы даже можете обнаружить некоторые фрактальные пейзажи, которых до вас никто никогда не видел …

_

Хотите узнать больше о фрактальных изображениях? Просто нажмите здесь или исследуйте фрактальное искусство или даже фрактал ascii. Может быть, это руководство заставит вас захотеть создавать такие великолепные изображения …

Сделано с математикой
Сделано с математикой
Сделано с математикой
Сделано с математикой

Второй приз в конкурсе Made with Math

Рекомендуемые: