Для всех творческих людей: раскраска Мандельброта ... нужны идеи - PullRequest
6 голосов
/ 17 апреля 2011

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

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

enter image description here

Ответы [ 5 ]

5 голосов
/ 30 ноября 2011

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

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

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

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

Синтезировать 24-битные значения RGB просто.
Столбец A имеет числа от 0 до 227, = ROW () - 2
Это преобразовывается в 24 бита в столбце B = КРУГЛЫЙ (A2 * 16777215/227).
Столбец C преобразуется в Hex = DEC2HEX (B2; 6)
Столбец D извлекает красный компонент и преобразует его в десятичную = HEX2DEC (LEFT (C2; 2))
Аналогично для столбца E зеленый = HEX2DEC (MID (C2; 3; 2)) и F синий = HEX2DEC (RIGHT (C2; 2))
G нарезает верхние биты и преобразует в 3-битный RGB
= BIN2DEC (ВЛЕВО (DEC2BIN ($ D2; 8); 1) & ВЛЕВО (DEC2BIN ($ E2; 8); 1) и ВЛЕВО (DEC2BIN ($ F2; 8) ; 1))
H 7-ми битный срез
= BIN2DEC (MID (DEC2BIN ($ D2; 8); 2; 1) & MID (DEC2BIN ($ Е2; 8); 2; 1) & MID (DEC2BIN ($ F2; 8); 2; 1))
Я 6 битный ломтик
= BIN2DEC (MID (DEC2BIN ($ D2; 8); 3; 1) & MID (DEC2BIN ($ Е2; 8); 3; 1) & MID (DEC2BIN ($ F2; 8); 3; 1))
и так далее до столбца младших битов N
= BIN2DEC (RIGHT (DEC2BIN ($ D2; 8); 1) и RIGHT (DEC2BIN ($ E2; 8); 1) & RIGHT (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
Строки c62-c69 имеют значения 0, 1, 2, 3, 4, 5, 6, 7
Таким образом, формула переводит 3-битное значение RGB на свое место в последовательности черного, синего, голубого, зеленого, белого, пурпурного, красного и желтого.
Я делаю подобное для 7-го по 1-й биты в столбцах P до V.

Теперь копирование и вставка в качестве значений для сортировки по этим последовательным цветам будет в порядке, но имеет тенденцию к резкому обрезанию между цветами. Простая сортировка по H по I по J ... приведет к тому, что верхний битовый зеленый 7-й желтый упорядочится рядом с верхним битовым белым 7-ми битным черным. Это обеспечило бы более плавный переход, если бы верхний битовый зеленый 7-й бит белого был упорядочен рядом с верхним битовым белым 7-ми битным зеленым. Так что я делаю 2-й уровень перевода. Это необходимо преобразовать в другую последовательность в зависимости от цвета старших битов.
Для каждого цвета по столбцам в «3-битной сортировке» я создаю дополнительные последовательности перевода, основанные на том, какого цвета были следующие старшие биты.
Colum W = VLOOKUP (H2; OFFSET («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.
Поэтому, если седьмые биты являются белыми, самый белый зеленый сортируется последним.
Для q62: q69 содержат 2, 1, 3, 7, 0, 6, 4, 5, поэтому самый зеленый белый цвет можно сортировать рядом с самым белым зеленым.
Копирование и вставка в качестве значений с последующей сортировкой по 8-битному преобразованию, затем по 7-й битной таблице, обозначенной 8-м битом и 6-й, обозначенной 7-м, и поэтому получается хороший сглаженный переход.

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

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

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

1 голос
/ 17 апреля 2011

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

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

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

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

0 голосов
/ 31 мая 2015

Я знаю, что он немного стар, но моя так называемая циклическая схема дает интересные результаты на увеличенных частях Мандельброта всего с 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);
    }
}
0 голосов
/ 17 апреля 2011

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

Вы можете использовать HSV-раскраску, чтобы получить эффект непрерывной радуги - установите S = 1,0, V = 1,0 (или как вы считаете, выглядит хорошо)и построить итерации (или некоторую функцию итераций) вокруг угла Хюэ.Конвертация в RGB довольно проста и может быть найдена.

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

0 голосов
/ 17 апреля 2011

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

...