我是python的新手,我对它产生分形图像的能力非常感兴趣。我自己也写了一些简单的,但我刚刚发现了曼德尔布罗特分形的脚本。。。它能以你想要的分辨率产生美丽的全彩图像。。。。但是代码被混淆了,看起来像曼德尔布洛特的ASCII艺术。。。。真的很酷,但是如果你想轻松阅读的话就太傻了。它包含了我在python中还没有学到的函数,所以如果有人可以缩进脚本使其看起来像普通的python脚本,那就太好了。 剧本:
_ = (
255,
lambda
V ,B,c
:c and Y(V*V+B,B, c
-1)if(abs(V)<6)else
( 2+c-4*abs(V)**-0.4)/i
) ;v, x=7200,4800;C=range(v*x
);import struct;P=struct.pack;M,\
j ='<QIIHHHH',open('M.bmp','wb').write
for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))or C:
i ,Y=_;j(P('BBB',*(lambda T:(T*80+T**9
*i-950*T **99,T*70-880*T**18+701*
T **9 ,T*i**(1-T**45*2)))(sum(
[ Y(0,(A%3/3.+X%v+(X/v+
A/3/3.-x/2)/1j)*2.5
/x -2.7,i)**2 for \
A in C
[:9]])
/9)
) )
就像我说的,艺术很酷,但是太难读了!如果有人能做到这一点,我将万分感激。在
注意:这并不是一个明确的答案,而是一步一步地进行模糊处理。如果你能提供一个额外的步骤,使事情更清楚,如果你能把它加到这个答案中,那就太好了。
好的,让我们从给代码适当的换行和缩进开始:
好一点,但还是让人困惑。例如,将
^{pr2}$P
定义为struct.pack
的别名,并将这两个声明全部放在一行中。如果我们去掉它们,并将lambda定义移到循环之外,我们得到:现在事情开始明朗化了。循环为每个像素写入颜色值,lambda返回一个3元组,表示每个像素的蓝色、绿色和红色值。在
根据你的评论,the asterisk (the star, *) unpacks a list into an argument list。在
经过几个小时后,Mandelbrot set产生了近100 MB的图像:
相关问题 更多 >
编程相关推荐