Используйте модуль colorsys для создания эффекта радуги на множествах Мандельброта и Джулии - PullRequest
0 голосов
/ 25 октября 2018

У меня есть код, который создает два изображения: два набора Мандельброта и один набор Джулии.Тем не менее, я хочу немного оживить вещи, сделав их «радужными», используя colorsys.Вот мой код:

from PIL import Image
import colorsys

imgx, imgy = 512, 512

maxIter = 256

m1 = Image.new("RGB", (imgx, imgy))
m2 = Image.new("RGB", (imgx, imgy))
j = Image.new("RGB", (imgx, imgy))

def mandelbrot(xmin, xmax, ymin, ymax, image, name):
    for y in range(imgy):
        cy = y * (ymax - ymin)/(imgy - 1) + ymin
        for x in range(imgx):
            cx = x * (xmax - xmin)/(imgx - 1) + xmin
            c = complex(cx, cy)
            z = 0
            for i in range(maxIter):
                if abs(z) > 2.0:
                    break
                z = z**2 + c
            r = i
            g = int((i*50)%256)
            b = int(255 - i)
            image.putpixel((x, y), (r, g, b))
    image.save(name, "PNG")

def julia(xmin, xmax, ymin, ymax):
    for y in range(imgy):
        cy = y * (ymax - ymin)/(imgy - 1) + ymin
        for x in range(imgx):
            cx = x * (xmax - xmin)/(imgx - 1) + xmin
            c = complex(cx, cy)
            z = c
            for i in range(maxIter):
                if abs(z) > 2.0:
                    break
                z = z**2 + complex(-0.1, 0.651)
            r = i
            g = int((i*50)%256)
            b = int(255 - i)
            j.putpixel((x, y), (r, g, b))
    j.save("julia.png", "PNG")


mandelbrot(-0.55, -0.5, -0.7, -0.65, m1, "m1.png")
mandelbrot(0.37, 0.38, 0.29, 0.3, m2, "m2.png")
julia(-0.6, 0.6, -0.6, 0.6)

Я понятия не имею, как вообще начать.Может ли кто-нибудь указать мне правильное направление?Я приложил 2 изображения, одно из которых - изображения, которые я сделал, а другое - пример того, что я хочу сделать.

Мандельброт 1
Ссылка

1 Ответ

0 голосов
/ 02 ноября 2018

Я добился некоторого успеха (в C, а не в Python), создав массив RGB, который пересекает B и G без R, затем G и R без B, а затем R и B без G. Затем используйте итерации (модульдлина массива) для индексации массива.За исключением самого набора M, который будет черным.

Для более плавного результата отфильтруйте изображение.

...