问题描述
目前,我正在玩一个脚本,该脚本生成Julia集和Mandelbrot集,然后使用pygame渲染这些点。
本质上,屏幕被映射到一个较小的坐标系,在该坐标系中,屏幕由x轴上的-2.5,2.5和y轴上的-1,1界定。然后,将此映射范围内的每个像素传递给函数,以检查其复数等效项是否在给定集中。此函数返回计算迭代次数是否在集合中(或最大迭代次数)的迭代次数。
然后,对于每个像素,我都知道根据此迭代得分为它着色的颜色,并逐个渲染每个像素。该过程的这一部分确实很费力,渲染大约需要30秒,但取决于设置的复杂性,可以花更多的时间。
这里是用于确定传递的复数和复数坐标是否在Julia集中的代码,在检查1920 * 1080像素时,这根本不需要很长时间来计算:
max_iter = 45
def julia(z,c):
n = 0
while abs(z) <= 2 and n < max_iter:
z = z * z + c
n += 1
return n
这是我用于pygame渲染的代码,这绝对是问题所在:
size_ = 1920,1080
re_ = -2.5,2.5
im_ = -1,1
surf = pygame.Surface(size)
colour_gradient1 = [c,c1,c2,c3,...] # This is some list of colours generated by a gradient function
for x in range(0,size_[0]):
for y in range(0,size_[1]):
z = complex(re_[0] + (x / size_[0]) * (re_[1] - re_[0]),im_[0] + (y / size_[1]) * (im_[1] - im_[0]))
m = julia(z,c)
colour = colour_gradient1[m]
pygame.draw.rect(surf,colour,(x,y,1,1))
我想我理解为什么这是性能密集型的,因为pygame和python并没有针对将内容渲染到这样的屏幕进行真正的优化。我目前正在尝试学习C ++,对于这样的东西我了解得更多。
我还尝试了缩放功能,可以用鼠标选择一个框,脚本将渲染该选定区域,但是实施此功能后问题就一直存在。随着放大分形变得越来越复杂,该脚本花了太长时间才能使用此功能。
所以我的问题是,有没有更好的方法可以使用python和pygame实时渲染类似这样的内容?我愿意使用其他程序包,但如果可以通过pygame进行安装,那将是理想的选择。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)