Раньше я создал генератор Мандельброта на питоне с использованием черепахи. Теперь я переписываю программу для использования библиотеки изображений Python, чтобы увеличить скорость и уменьшить ограничения на размер изображений.При построении Мандельброта с использованием NumPy & Pillow программа выводит кажущийся шум
Однако программа ниже выводит только RGB, почти шум. Я думаю, что это связано с различием в том, как NumPy и PIL имеют дело с массивами, поскольку говорят l[x,y] = [1,1,1]
, где l = np.zeros((height,width,3))
не просто делают 1 пиксель белого цвета, когда выполняются img = Image.fromarray(l)
и img.show()
.
def imagebrot(mina=-1.25, maxa=1.25, minb=-1.25, maxb=1.25, width=100, height=100, maxit=300, inf=2):
l,b = np.zeros((height,width,3), dtype=np.float64), minb
for y in range(0, height):
a = mina
for x in range(0, width):
ab = mandel(a, b, maxit, inf)
if ab[0] == maxit:
l[x,y:] = [1,1,1]
#if ab[0] < maxit:
#smoothit = mandelc(ab[0], ab[1], ab[2])
#l[x, y] = colorsys.hsv_to_rgb(smoothit, 1, 1)
a += abs(mina-maxa)/width
b += abs(minb-maxb)/height
img = Image.fromarray(l, "RGB")
img.show()
def mandel(re, im, maxit, inf):
z = complex(re, im)
c,it = z,0
for i in range(0, maxit):
if abs(z) > inf:
break
z,it = z*z+c,it+1
return it,z,inf
def mandelc(it,z,inf):
return (it+1-log(log(abs(z)))/log(2))
UPDATE 1:
я понял, что одна из главных ошибок в этой программе (я уверен, что есть много) является то, что я использовал х, у COORDS в качестве комплексных коэффициентов ! Итак, от 0 до 100 вместо -1,25 до 1,25! Я изменил это, так что теперь код использует переменные a, b для их описания, увеличиваясь таким образом, что я украл некоторые из моего кода в версии черепахи. Соответствующий код был соответствующим образом обновлен. Поскольку в настоящее время код Smooth Coloring Algorithm закомментирован для отладки, переменная inf
была уменьшена до 2
.
UPDATE 2:
я редактировал Numpy индекс с помощью от большого пользователя. Теперь программа выводит это при установке 200 на 200:
Как вы можете видеть, это определенно показывает некоторую математическую форму, и все же наполнен всеми этими странными красными, зелеными и синими пикселей! Почему они здесь? Моя программа может устанавливать только значения RGB в [1,1,1]
или оставить это по умолчанию [0,0,0]
. Это не может быть [1,0,0]
или что-нибудь подобное - это должно быть серьезным недостатком ...
UPDATE 3:
Я думаю, что есть ошибка с интеграцией Numpy и PIL в. Если я l = np.zeros((100, 100, 3))
, а затем состояние l[0,0,:] = 1
и, наконец, img = Image.fromarray(l)
& img.show()
, это то, что мы получаем:
Здесь мы получаем серию цветных пикселей. Этот вопрос содержит.
UPDATE 4:
Я понятия не имею, что происходит раньше, но, кажется, с np.uint8
массива, Image.fromarray()
использует цветовые значения 0-255. С этой мудростью я двигаюсь на один шаг ближе к пониманию этого Мандельбуга!
Теперь, я do получить что-то неопределенно математическое, однако оно все еще выводит странные вещи.
Эта точка все есть ... я даже странные вещи, если я изменяю np.uint16
, я полагаю, из-за различных байт-формы и кодирования схемы.
Обычно избегает итерации Мандельброта, когда величина комплексного значения превышает '2' не' 10 ** 100'. –
Да, я понимаю, почему это может показаться необычайно странным. Это потому, что я использую Smooth Coloring Algorithm, чтобы цвет каждого пикселя. Для этого требуется очень большой «горизонт» порядка 10 ** 100. –
Интересно. Я не могу дать ссылку на «когда величина достигает 2, значение функции в конечном итоге исчезнет» (возможно, в соавторстве «Наука фрактальных изображений» Б. Б. Мандельброт). Но дело в том, что на более низких итерационных участках (где функция ускользает) контуры являются гладкими, поэтому итерация в дальнейшем является ненужной. Он находится только вблизи границы M-Set (рядом с максимальными итерациями), где мой рендеринг изображений выглядит хаотичным. Имеет ли повышенная ценность эвакуации? Я не работал над Mset в течение нескольких лет, поэтому не могу сразу проверить это. –