Você está na página 1de 5

Esquema de Cores no Fractal de Mandelbrot

Jonnathas Henrique Ludovico Carvalho

Universidade Federal do ABC (UFABC)


jonnathas.carvalho@aluno.ufabc.edu.br

1. Explicar Teoricamente como se faz um Esquema de cores em um


Fractal (2 páginas)

Para a atividade foi escolhido o algoritmo de divergência para colorir o fractal


em estudo, este algoritmo consiste no uso de uma escala de cores. O algoritmo é
baseado na velocidade de fuga de cada sequência de uma região escolhida já que
todas as sequencias de fuga divergem ao infinito. A partir da formula do fractal,
é passado um ponto correspondente ao pixel e então é escolhido um valor de
resgate, por exemplo, para um fractal de Mandelbrot, é o circulo correspondente
ao raio=2. Então a situação mais simples é a dos pixels cujas orbitas nunca
escapam dessas orbitas, que são coloridos de preto. Já os que escapam são
coloridos de diferentes maneiras. O algoritmo de divergência colore os pixels que
escapam em termos de quantas iterações são necessárias para escapar do circulo
de resgate. È possível escolher outras regiões além de círculos, como triângulos,
elipses e etc. Obviamente não se pode ter um número de cores superior ao
numero de iterações escolhidas para o estudo. O algoritmo de divergência pode
ser considerado como uma medição da distância não-Euclidiana de um ponto z
até a borda do fractal, e permite que todos os pixels sejam vistos. O algoritmo é
baseado na derivada da função iterativa.

2. Colorindo o Fractal de Mandelbrot (2 página)


A principio precisamos associar uma cor para cada possível valor do número
de iterações, porém é possível ver as bandas de cores dessa forma.

hue = int(255 * m / MAX_ITER)
saturation = 255
value = 255 if m < MAX_ITER else 0 #em plot.py

As cores HSV foram escolhidas para que a mudança de cor seja mais fácil, já
que é necessário alterar somente o hue, que é dependente somente do
numero de iterações.
Para remover as bandas foi usado uma contagem normalizada de iterações,
que pode ser feito alterando a criação do fractal, adicionando um resultado de
1 - log(log2(abs(z))) onde z é o último valor computado da sequência
(abs(z) > 2).

return n + 1 - log(log2(abs(z))) #em mandelbrot.py

No entanto as cores não ficam igualmente distribuídas dessa forma,


principalmente se o número de iterações é alto. Para melhorar a situação, o
número de pixels de cada número de iteração é contado. Para cada número de
iteração, as cores são associadas dando um maior leque de cores aos
números de iteração que alteram mais pixels.

values[(x, y)] = m
        if m < MAX_ITER:
            histogram[floor(m)] += 1

Este trecho é um contador para o histograma, onde o número de iterações


define quantas vezes o laço vai ser feito

total = sum(histogram.values())

somatória do total de valores de histograma necessários;

hues = []

indice de hues;

h = 0

Número inicial para o contador de valores do histograma.

for i in range(MAX_ITER):
    h += histogram[i] / total
    hues.append(h)
hues.append(h)
 
im = Image.new('HSV', (WIDTH, HEIGHT), (0, 0, 0))
draw = ImageDraw.Draw(im)

laço que adiciona os valores de h ao índice hue para contar o número de cores
necessárias para o fractal e em seguida desenhar a imagem
for x in range(0, WIDTH):
    for y in range(0, HEIGHT):
        m = values[(x, y)]

Os 2 ultimos laços são usados em conjunto com a linha de código que vai
efetivamente colorir a imagem de acordo com os parâmetros indicados
anteriormente no código

3. Resultados Obtidos (2 páginas)

Fractal com um número de iterações = 80.


Fractal com um número de iterações = 10.

Fractal com um número de iterações = 2.


Referências Bibliográficas
On Fractal Colouring Algorithms:
https://faculty.kfupm.edu.sa/math/akca/papers/yaz.pdf - Acessado 05/06/2020

Coloring Dynamical Systems in the Complex Plane:


http://math.unipa.it/~grim/Jbarrallo.PDF - Acessado 05/06/2020

How to plot the Mandelbrot Set: -By [CG]Maxime


https://www.codingame.com/playgrounds/2358/how-to-plot-the-mandelbrot-set/adding-
some-colors - Acessado 05/06/2020

Nesta seção devem ser colocadas as referências bibliográficas utilizadas para


o desenvolvimento e escrita deste trabalho.

Você também pode gostar