Newton 分形也是分形里面比较基本的一种,我一直没有写它也是因为觉得可能太容易了。按习惯我写之前先去网上搜索了一下代码,发现居然没有一个能看的。只好自己动手做了一个,效果如下:
多项式 ,染色方案 'hot':
这里有两个关键:
第一是要使用合适的公式来平滑;第二是要使用 matplotlib 提供的 colormap,而不是自己造轮子定义一个。matplotlib 在显示图像的时候默认会有一个 bilinear 插值,帮你再平滑一次,所以效果比用
PIL 好多了。
图形版只有我一个人支撑是不够的,希望大家都积极 po 出自己作品,形成讨论和交流的气氛。
还有,不知道有没有童鞋是受到这个版块的帖子吸引,开始学习 Python 的呢?有的话可以来报个到。
上面这幅图像的代码如下:
- import numpy as np
- import matplotlib.pyplot as plt
- f = np.poly1d([1, 0, 0, -1])
- df = np.polyder(f)
- def iterate(z):
- i = 0
- while abs(f(z)) > 0.0001:
- with np.errstate(all='ignore'):
- w = z - f(z)/df(z)
- i += np.exp(-1/abs(w-z))
- z = w
- return i
- y, x = np.ogrid[1:-1:600j, -1:1:600j]
- z = x + y*1j
- img = np.frompyfunc(iterate, 1, 1)(z).astype(np.float)
- fig = plt.figure(figsize=(4, 4), dpi=100)
- ax = fig.add_axes([0, 0, 1, 1], aspect=1)
- ax.axis('off')
- ax.imshow(img, cmap='hot')
- fig.savefig('newton.png')
复制代码
|