Для всех творческих людей: набор для раскрашивания Мандельброта… нужны идеи

#colors #mandelbrot

#Цвет #мандельброт

Вопрос:

Учитывая максимальное количество итераций = 1000, дайте мне несколько идей о том, как его раскрасить (красным, зеленым, синим). Все, что я могу придумать прямо сейчас, это хромые 2 цветовых градиента : (

Возможно ли на самом деле создать что-то настолько красивое, как это?

введите описание изображения здесь

Комментарии:

1. Многие фрактальные рисунки, которые вы видите там, не являются «чистыми» наборами Мандельброта; они часто подвергаются постобработке и / или полагаются на большее количество вычислений, чем простое количество итераций. Не расстраивайтесь; эта область очень глубока, если вы хотите исследовать!

2. эта картинка не является обычным набором Мандельброта. иногда его называют «буддхаброт»

3. Да… это изображение выглядит как комбинация графиков с низким разрешением наборов Мандельброта с разными показателями ( en.wikipedia.org/wiki/Multibrot_set ) и / или с преобразованиями координат. Я думаю, что настоящие увеличенные графики приятнее.

Ответ №1:

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

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

Мой метод заключается в использовании всех доступных цветов цветового куба для 228 индексов палитры Fractal extreme. Используя электронную таблицу (OpenOffice), я беру линейную выборку из 24-битных значений. Я вырезаю по 1 биту из каждого компонента RGB (т. Е. верхнего бита), чтобы сформировать 3-битное значение RGB. Переведите 8 3-битных цветов с помощью vlookup в последовательность, такую как белый, пурпурный, красный, желтый, черный, синий, голубой и зеленый. Затем я копирую и вставляю в качестве значений, чтобы затем я мог отсортировать последовательность верхних битов по 7-му биту…

Хотите узнать подробности?

Синтезировать 24-битные значения RGB очень просто.
Столбец A содержит числа от 0 до 227, = СТРОКА () -2
Это преобразуется в 24 бита в столбце B = ROUND (A2 * 16777215/227).
Столбец C преобразуется в шестнадцатеричный = DEC2HEX(B2; 6)
Столбец D извлекает красный компонент и преобразует в десятичный = HEX2DEC (СЛЕВА (C2; 2))
Аналогично для столбца E зеленый = HEX2DEC (СРЕДНИЙ (C2; 3; 2)) и F синий = HEX2DEC (СПРАВА (C2; 2)))
G обрезает верхние биты и преобразует в 3-битный RGB
= BIN2DEC (СЛЕВА ( DEC2BIN($D2;8); 1)amp;LEFT (DEC2BIN ($ E2;8); 1)amp;LEFT (DEC2BIN ($ F2;8); 1))
H 7-й битный фрагмент
=BIN2DEC(MID(DEC2BIN($D2;8); 2;1)amp;MID (DEC2BIN ($E2;8); 2;1)amp;MID (DEC2BIN ($F2;8); 2; 1))
I 6-й битный фрагмент
=BIN2DEC ( MID(DEC2BIN($D2;8); 3;1)amp;MID (DEC2BIN($E2;8); 3;1)amp;MID(DEC2BIN($F2;8);3;1))
и так далее до столбца с младшим битом N
=BIN2DEC(СПРАВА (DEC2BIN($D2;8); 1)amp;СПРАВА (DEC2BIN($E2;8); 1)amp; СПРАВА (DEC2BIN($F2;8); 1))

Теперь, чтобы преобразовать этот 3-разрядный RGB в последовательность цветов, у меня есть еще одна вкладка в электронной таблице под названием «3-разрядная сортировка».
В столбце H формула = VLOOKUP(G2;’3bitsort’.$B$62:$C$69; 2; 0).
Строки с b62 по b69 содержат значения 0, 1, 3, 2, 7, 5, 4, 6
Строки с62 по с69 содержат значения 0, 1, 2, 3, 4, 5, 6, 7
Таким образом, формула переводит 3-битное значение RGB на свое место в последовательности черный, синий, голубой, зеленый, белый, пурпурный, красный и желтый.
Я делаю аналогично для 7-го по 1-й биты в столбцах с P по V.

Теперь копирование и вставка в виде значений для сортировки по этим упорядоченным цветам было бы нормально, но, как правило, имеет место резкое различие между цветами. Простая сортировка по H, по I, по J … приведет к тому, что верхний бит будет зеленым, седьмой — желтым, расположенным в последовательности рядом с верхним битом белого, седьмой — черного. Переход был бы более плавным, если бы верхний бит зеленого цвета, 7-й бит белого цвета, был упорядочен рядом с верхним битом белого цвета, 7-й бит зеленого цвета. Итак, я выполняю перевод второго уровня. Это нужно перевести в другую последовательность, основанную на том, каким был цвет старших разрядов.
Для каждого цвета по столбцам в «3-битной сортировке» я создаю дополнительные последовательности перевода, основанные на том, какого цвета были следующие старшие биты.
Столбец W = VLOOKUP(H2;СМЕЩЕНИЕ (‘3-битная сортировка’.$E$62;0; 3 * O2;8;2);2;0)
Смещение выглядит справа от последовательности в b62: c59, используемой ранее, туда, где я настроил нужные последовательности.
O2 — это переведенный цвет верхнего бита, для зеленого это 3, поэтому 9 столбцов справа от b62: b69 — это столбцы n62: n69, которые содержат последовательность 3, 1, 2, 6, 4, 0, 5, 7
o62: o69 содержат переведенную последовательность 0, 1, 2, 3, 4, 5, 6, 7.
Итак, если 7-й бит белый, то самый белый зеленый сортируется последним.
Для q62: q69 содержит 2, 1, 3, 7, 0, 6, 4, 5 таким образом, самые зеленые белые могут быть отсортированы рядом с самыми белыми зелеными.
Копируем и вставляем в виде значений, затем сортируем по 8-битному переводу, затем по 7-битной таблице, обозначаемой 8-м битом, а 6-й идентифицируется 7-м, и таким образом получается приятный сглаженный переход.

Но я на этом не останавливаюсь.

Fractal Extreme может интерполировать цвета, когда цвета распределены по многим итерациям. На приведенном выше рисунке минимальное количество итераций составляет 12939, максимальное — 27609, поэтому каждый цвет из таблицы палитры 228 индексов размазывается по десяткам итераций. Во Fractal Extreme также есть функция, при которой каждый нечетный цветовой индекс может быть взят из таблицы 2-й палитры. Это дает эффект полосы. Я сдвинул палитру полос на 16 позиций, что дает интерполяции небольшую разницу между цветами для работы.

И вот как старый хакер базы данных раскрашивает мандельброта, он использует электронную таблицу.

Ответ №2:

50 итераций — это очень, очень грубо, и вы не получите много деталей.

Самый простой способ получить спектр — использовать несколько двухцветных градиентов. Итак, 50-41 итерации могут быть оттенками синего, 41-30 — сине-красными, 29-10 — красно-зелеными, а 9-0 — зелено-белыми.

Гамма монитора RGB имеет треугольную форму, поэтому такая схема в значительной степени повторяет внешнюю сторону «цветового круга».

Поиск библиотеки HSV RGB может привести к появлению инструментов, которые помогут использовать более простую цветовую систему HSV.

Комментарии:

1. Спасибо за подсказку, Картофель, я увеличу ее до 1000.

2. @Carpe: Увеличьте его, насколько сможете. Это должно быть ограничивающим фактором производительности. Многие программы адаптируют пороговое значение адаптивно, поэтому должны быть простые известные способы сделать это.

3. Фиксированное количество итераций полезно для обеспечения работоспособности вашего кода. Мой собственный плоттер выполняет несколько проходов по набору, отрисовывая между проходами; он начинается с небольшого количества итераций, чтобы он мог быстро что-то показать пользователю. Очевидно, что пиксели, которые ускользают, больше не играют роли в вычислениях; когда график «достаточно хорош», то есть больше, чем некоторая доля пикселей, ускользнуло или находится в кардиоиде или лампочке с периодом 2, он останавливается.

Ответ №3:

Я использовал цветовой спектр HSL / HSV, когда у меня была задача создать изображение набора Мандельброта. Вы могли бы выбрать цвет в зависимости от нормализованных итераций (значения current iteration/max iteration = colour ).

Комментарии:

1. Эй, это довольно круто. Я хочу опубликовать изображение, но мне нужно более 10 повторений, кто-нибудь может оказать мне услугу? : P

Ответ №4:

Всего за 50 итераций можно кое-что сказать о дискретной палитре цветов — выберите (скажем) 10 и просто отобразите каждый пиксель в виде палитры[itercount% palettesize]. Поиграйте с палитрой, чтобы она не так бросалась в глаза. Однако это не сработает, если вы позже перейдете к плавному подсчету итераций, что требует непрерывной палитры. Вы также можете захотеть настроить его, если позже перейдете к более глубокому подсчету итераций.

Вы могли бы использовать раскраску HSV для создания непрерывного эффекта радуги — установите S = 1.0, V = 1.0 (или что бы вы ни считали подходящим) и нанесите итерации (или некоторую функцию итераций) вокруг угла оттенка. Преобразование в RGB довольно простое, и его можно найти в Google.

Как насчет многоступенчатых градиентов? Основываясь на идее дискретной палитры, вместо того, чтобы просто переходить от одной палитры к следующей, вы могли бы переходить от одной палитры к другой в течение некоторого подходящего диапазона итераций; это лучше подходит для большего потенциального количества итераций.

Ответ №5:

Я знаю, что это немного устарело, но моя так называемая циклическая схема дает интересные результаты на увеличенных частях Мандельброта всего за 256-512-1024 итерации.

https://github.com/nmmmnu/MandelDroid/blob/master/src/nu/nmmm/android/fractal/color/FColorCyclic.java

 public class FColorCyclic  implements FColor{
    final private static int SIZE2 = 64;
    final private static int SIZE = SIZE2 >> 1;

    @Override
    public RGB convertColor(int color, int maxcolor, RGB rgb) {
        // bounded color
        if (color == maxcolor)
            return rgb.setColorZero();

        int a = color % SIZE2;

        if (a > SIZE)
            a = SIZE2 - a;

        return rgb.setColor(a, SIZE2);
    }
}