Python教程_Python画Mandelbrot集 代码

    作者:Comet更新于: 2015-06-19 11:17:19

    大神带你学编程,欢迎选课

     曼德勃罗集(Mandelbrot集)可能是最有名的分形图形显卡,课课家小编下面分享的是Python教程的详细教程,是如何使用Python来尝试绘制图形的。由于Python标准库未进行图形处理的支持,我用的是PIL。首先看一个图表生成:相关的代码看起来是这样的:# - * - 编码:UTF-8 - * -
    Python教程Python画Mandelbrot集
    #
    # z = z ^ 2 + c
    #
    # by oldj
    # http://oldj.net/
    #
    # last update: 2010-10-22 22:02:05
    #

    import time
    import Image, ImageDraw

    g_size = (40, 30) # 图形最终尺寸
    g_max_iteration = 256 # 最大迭代次数
    g_bailout = 4 # 最大域
    g_zoom = 2.5 / g_size[0] # 缩放参数
    g_offset = (-g_size[0] * 0.25, 0) # 偏移量
    g_HSL = (210, 80, 50) # HSL色彩基调

    def draw(antialias = True):
    zi = 2 if antialias else 1 # antialias: 抗锯齿 size = [i * zi
    size = [i * zi for i in g_size]
    zoom = g_zoom / zi
    offset = [i * zi for i in g_offset]
    bailout = g_bailout * zi
    img = Image.new("RGB", size, 0xffffff)
    dr = ImageDraw.Draw(img)

    print "painting Mandelbrot Set.."
    for xy, color in getPoints(size, offset, zoom):
    dr.point(xy, fill = color)
    print "100%\n"

    del dr
    if antialias:
    img = img.resize(g_size, Image.ANTIALIAS)
    img.show()
    img.save("mandelbrot_set_%dx%d.png" % g_size)

    def getPoints(size, offset, zoom, ti = 0, tstep = 1):
    "生成需要绘制的点的坐标及颜色"

    def getRepeats(c):
    z = c
    repeats = 0
    while abs(z) < g_bailout and repeats < g_max_iteration:
    z = z * z + c
    repeats += 1
    return repeats

    def getColor(r):
    color = "hsl(0, 0%, 0%)"
    if r < g_max_iteration:
    v = 1.0 * r / g_max_iteration
    h = ch * (1 - v)
    s = cs
    l = cl * (1 + v)
    color = "hsl(%d, %d%%, %d%%)" % (h, s, l)
    return color

    xs, ys = size
    xw, yh = xs / 2, ys / 2
    xo, yo = offset
    ch, cs, cl = g_HSL

    progress = 0
    for iy in xrange(ys):
    p = iy * 100 / ys
    if iy % 10 == 0 and p != progress:
    print ("%d%%..." % p) # 显示进度
    progress = p
    for ix in xrange(ti, xs, tstep):
    x = (ix - xw + xo) * zoom
    y = (iy - yh + yo) * zoom
    c = complex(x, y)
    r = getRepeats(c)
    yield (ix, iy), getColor(r)

    def main():
    t0 = time.time()
    draw()
    t = time.time() - t0
    print "%dm%.3fs" % (t / 60, t % 60)

    if __name__ == "__main__":
    Python教程画Mandelbrot集
    admin其中的前八行设置图形的最终大小,如果你想生成的图形较大或较小的数字,您可以更改的参数。第9行是迭代的最大数目,该参数的更高的值可以是更多图像细节,当然,成本是需要更多的计算时间。此外,功能的getColor47至55行定义每个点生成规则的颜色,你可以修改规则的颜色在这里,吸引更多的Mandelbrot集不同的颜色。以下是根据不同的参数和颜色规则的程序产生几个其它副图像。修改上面的代码,就容易产生更多的详细的图片。但是,如果你不想自己做,你也可以尝试这个xaos的软件,通过它可以是本地Mandelbrot集放大了许多倍。当然,你会发现,无论多少放大,Mandelbrot集,总是有无尽的变化和精致的细节。更多Python教程或Python视频教程可登陆课课家在线学习平台进行查询观看!

python 更多推荐

课课家教育

未登录