Множественная функция Мандельброта гладкой окраски

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

self.palette = [(3, 25, 61),(5, 43, 107),(7, 61, 153),(20, 96, 226),(20, 164, 226),(74, 181, 226),(138, 211, 242),(205, 234, 247),(225, 237, 242),(255,255,255)]

Вот моя палитра

if n == self.max_iterations:
    self.screen.set_at((x, y), (110, 13, 13))
else:
    gradient = 1 + n - math.log(math.log(abs(m))) / math.log(2.0)
    iteration = n + 1 - gradient
    color1 = list(self.palette[n % 10])
    if n % 10 <= 8:
        color2 = list(self.palette[n % 10+1])
    else:
        color2 = list(self.palette[-1])

    color = [[], [], []]
    for number, elt in enumerate(color):
        color[number] = color1[number] + (iteration % 1)*(color2[number]-color1[number])

    self.screen.set_at((x, y), tuple(color))

Здесь моя функция окраски

И вот что я получаю

Как вы можете видеть, цвета гладкие, но неправильно, в цветах нет непрерывности.

Я хотел бы иметь что-то вроде этого:

идеальный результат

мы не видим цветовых разрывов


person Hugo    schedule 18.03.2019    source источник
comment
как вы генерируете свой набор Мандельброта? Я подозреваю, что вы можете работать с данными недостаточно высокого разрешения.   -  person adrtam    schedule 19.03.2019
comment
Обманом может быть: сгладить изображение с помощью фильтра и снова нарисовать резкий набор сходящихся данных сверху.   -  person mikuszefski    schedule 19.03.2019
comment
@adrtam Я не думаю, что проблема в разрешении   -  person Hugo    schedule 20.03.2019
comment
@Spektre мой образ ? Второй ?   -  person Hugo    schedule 20.03.2019
comment
@Hugo взгляните на это Не могу найти способ раскрасить набор Мандельброта так, как я стремлюсь   -  person Spektre    schedule 27.05.2019


Ответы (1)


Похоже, вы выбираете цвет пикселя на основе дискретного значения (n, время выхода).

Я бы предложил:

1) Нанесите цвет-n на одномерную линию. Он кажется непрерывным? Если нет, выберите цветовую карту, которая кажется непрерывной по сравнению с другими. увеличение н.

2) Найдите способ сделать n непрерывным, а не дискретным. Один из способов сделать это — вычислить максимальное время выхода для окна просмотра, а затем разделить все остальные времена выхода на это значение, чтобы получить более непрерывное поле. См. эту ссылку о нормализации времени перехода:
https://linas.org/art-gallery/escape/escape.html

Я считаю, что если вы соответствуете обоим вышеуказанным критериям, поле, окружающее основное изображение, будет выглядеть непрерывным, а не иметь вид «изолинии».

person afarley    schedule 19.03.2019