gpt4 book ai didi

python - 如何在 Zelle 图形中更快地渲染此分形?

转载 作者:行者123 更新时间:2023-11-28 22:27:40 27 4
gpt4 key购买 nike

渲染此 mandelbrot 集仅需 100 次迭代就需要一个多小时,而渲染 10,000 次迭代则需要 10 个小时。有没有办法让它更快:

from graphics import *

width = 700
height = 700
win = GraphWin("Mandelbrot",width,height)
spacing = 1
zoom = 0.1
xOffset = -0.171

yOffset = 0.61
win.setBackground('black')
for x in range(0,width,spacing):
for y in range(1,height,spacing):
a = ((x / width) * zoom) - xOffset
b = ((y / height) * zoom) - yOffset

pt = Point(x,y)


n = 0
ca = a
cb = b
while(n<10000):
aa = a * a - b * b
bb = 2 * a * b
a = aa + ca
b = bb + cb
n+=1
if(abs(a+b) > 2000):
break
if(n < 2000):
pt.setFill('black')
if(n>5000):
pt.setFill('grey')
if(n>1000):
pt.setFill('white')

pt.draw(win)

最佳答案

最快的方式可能是 numpy . 参见 "How To Quickly Compute The Mandelbrot Set In Python"有关此方法的详细信息。

对于普通的纯 Python,使用 native complex numbers加速循环。也使用 abs()快速计算复数大小的函数:

>>> def mandle(c, boundary=2.0, maxloops=10000):
# https://en.wikipedia.org/wiki/Mandelbrot_set
z = 0.0j
for i in range(maxloops):
z = z * z + c
if abs(z) > boundary:
break
return i

>>> mandle(0.04 + 0.65j)
21
>>> mandle(0.04 + 0.66j)
16
>>> mandle(0.04 + 0.67j)
12

渲染本身不太可能是您程序中最慢的部分(10,000 次循环会使绘制一个点的时间相形见绌)。也就是说,如果您想加快渲染速度,通常唯一的选择是在每次调用图形库时绘制多个点。

最后,考虑您是否真的希望最大迭代次数为 10,000。最多迭代 200 次即可获得良好的结果。

关于python - 如何在 Zelle 图形中更快地渲染此分形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com