【问题标题】:Julia set code creates a circle instead of a fractalJulia 集代码创建一个圆而不是分形
【发布时间】:2018-10-24 23:22:08
【问题描述】:

我有这个代码:

from PIL import Image
import colorsys

xmin, xmax = -2.0, 2.0
ymin, ymax = -2.0, 2.0

depth = 12

imgx, imgy = 512, 512

maxIter = 256

image = Image.new("RGB", (imgx, imgy))

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 = c + complex(0.25, 0.1)
        r = i
        g = int((i*50)%256)
        b = int(255 - i)
        image.putpixel((x, y), (r, g, b))

它创建了一个圆圈的图像(下图),我不明白为什么。我认为这可能与 for 循环和 if 语句有关,但我无法弄清楚问题是什么。如果不是,那是什么?

旁注:此代码改编自我编写的 Mandelbrot 集代码。唯一的区别是z = c + complex(0.25, 0.1), 不是z = z**2 + c.

Julia Set

【问题讨论】:

  • 查看这个可爱的debug 博客寻求帮助。此代码为显示产生什么值?请提供说明性的跟踪输出。
  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。您发布的代码因未定义符号而失败——可能缺少import
  • @Prune 抱歉,忘记上传图片

标签: python fractals mandelbrot


【解决方案1】:

这一行:

z = c + complex(0.25, 0.1)

在每次迭代中总是产生相同的值(当前点 + 一个常数),因此您的代码只是画一个圆圈。将该行更改为

z = z**2 + complex(0.25, 0.1)

并根据当前点初始化z(如c 在您当前的代码中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2016-02-21
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多