Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在mandelbrot集实现平滑着色_Python_Python 3.x_Fractals_Mandelbrot - Fatal编程技术网

Python 在mandelbrot集实现平滑着色

Python 在mandelbrot集实现平滑着色,python,python-3.x,fractals,mandelbrot,Python,Python 3.x,Fractals,Mandelbrot,我正在尝试使用HSV值和PIL库为MandelBrot上色 即使多次尝试摆弄HSV值,我也无法达到预期效果 这是我目前拥有的 这里是期望的效果 这是我正在尝试的代码,如果您可以添加一些技巧来优化下面的代码以更快地计算集合,这也可能是有益的,我是python新手 从PIL导入图像 随机输入 输入数学 从十进制输入十进制 #图像画布的大小 高度=500 缩放=0.0 Y_PAN=0.0 #复平面的射程 最小值X=-2.0+缩放 最大X=2.0-缩放 最大Y=2.0+Y平移-缩放 MIN_Y=-2

我正在尝试使用HSV值和PIL库为MandelBrot上色

即使多次尝试摆弄HSV值,我也无法达到预期效果

这是我目前拥有的

这里是期望的效果

这是我正在尝试的代码,如果您可以添加一些技巧来优化下面的代码以更快地计算集合,这也可能是有益的,我是python新手

从PIL导入图像
随机输入
输入数学
从十进制输入十进制
#图像画布的大小
高度=500
缩放=0.0
Y_PAN=0.0
#复平面的射程
最小值X=-2.0+缩放
最大X=2.0-缩放
最大Y=2.0+Y平移-缩放
MIN_Y=-2.0+Y_平移+缩放
数据=[]
def映射到比例d(x,最小值,最大值,最小值,最大值):
#返回浮动
返回浮点((x-输入最小)*(输出最大-输出最小)/(输入最大-输入最小)+输出最小)
def映射到比例(x,最小值,最大值,最小值,最大值):
#返回整数
返回(x-输入最小值)*(输出最大值-输出最小值)/(输入最大值-输入最小值)+输出最小值
#到Zn的最大迭代次数
ITER=200
#循环以遍历画布中的每个点
对于X范围内的y(高度):
对于x范围内的x(高度):
#转换为复杂平面比例
a=映射到比例d(x,0,高度,最小值x,最大值x)
b=映射到比例d(y,0,高度,最大y,最小y)
#原值
_a=a
_b=b
计数器=0
#在复平面的(a,b)处开始迭代
#计算z^2+c
而(计数器4:
打破
计数器=计数器+1
#初始化颜色
h=0
s=映射到比例尺(计数器,0,ITER,0,100)
v=映射到比例尺(计数器,0,ITER,0,100)
如果(计数器==ITER):
h=0
s=0
v=0
#转换为8位
h=映射到比例(h,0,360,0,255)
s=映射到比例(s,0,100,0,255)
v=映射到比例(v,0,100,0,255)
附加数据((h、s、v))
img=图像。新('HSV',(高度,高度))
img.putdata(数据)
img.show()
img.convert('RGB').save('test.png'))

IMO计算颜色的最佳方法是预先计算一个(或多个)数组,该数组按迭代次数编制索引。至于速度,我不知道Python优化了多少,但一个好处可能是将
b=map\u移动到
x
循环之外,当然,不修改
b
。每一个小的帮助,但迭代是主要的瓶颈。如果您的代码被解释,它的性能将不如本机代码。看到几乎是重复的