1
#
发表于 2016-10-13 20:38:01
|
|
|
Newton 分形也是分形里面比较基本的一种,我一直没有写它也是因为觉得可能太容易了。按习惯我写之前先去网上搜索了一下代码,发现居然没有一个能看的。只好自己动手做了一个,效果如下:

多项式 ,染色方案 'hot':



这里有两个关键:

第一是要使用合适的公式来平滑;第二是要使用 matplotlib 提供的 colormap,而不是自己造轮子定义一个。matplotlib 在显示图像的时候默认会有一个 bilinear 插值,帮你再平滑一次,所以效果比用 PIL 好多了。


图形版只有我一个人支撑是不够的,希望大家都积极 po 出自己作品,形成讨论和交流的气氛。

还有,不知道有没有童鞋是受到这个版块的帖子吸引,开始学习 Python 的呢?有的话可以来报个到。


上面这幅图像的代码如下:
  1. import numpy as np
  2. import matplotlib.pyplot as plt


  3. f = np.poly1d([1, 0, 0, -1])
  4. df = np.polyder(f)

  5. def iterate(z):
  6.     i = 0
  7.     while abs(f(z)) > 0.0001:
  8.         with np.errstate(all='ignore'):
  9.             w = z - f(z)/df(z)
  10.             i += np.exp(-1/abs(w-z))
  11.             z = w
  12.     return i

  13. y, x = np.ogrid[1:-1:600j, -1:1:600j]
  14. z = x + y*1j
  15. img = np.frompyfunc(iterate, 1, 1)(z).astype(np.float)
  16. fig = plt.figure(figsize=(4, 4), dpi=100)
  17. ax = fig.add_axes([0, 0, 1, 1], aspect=1)
  18. ax.axis('off')
  19. ax.imshow(img, cmap='hot')
  20. fig.savefig('newton.png')
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?邀请

×