1. Koch曲线
瑞典数学家Helge von Koch,在1904年发表的“从初等几何构造的一条没有切线的连续曲线”的论文中提出Korch曲线。它的描述如下:
- 指定一条线段的长度\(l\)(可以理解为第0次迭代)
- 将这条线段三等分,并以中间的线段为底边构造一个等边三角形,然后去掉底边
- 对2中生成的曲线的每一条边重复2的操作(每操作一次称为一次迭代)
最终得到的集合图形长度为:$$L=l*(\frac{4}{3})^{N}$$,其中的N指的是迭代次数。
1.2 绘制方法:
- 如果N=0,直接画出L长的直线即可
- 如果N=1(第一次迭代),画出长度为L/3的线段;画笔向左转60度再画长度为L/3长的线段;画笔向右转120度画长度为L/3长的线段;画笔再向左转60度画出长度为L/3的线段

- 如果n>1,第n次迭代相当于:n-1次迭代;画笔左转60度;n-1次迭代;画笔右转120度;n-1次迭代;画笔左转60度;n-1次迭代。
1.3 Python代码实现
| |
1.4 绘制的图形
下面分别是n=3, length=300和n=4, length=400生成的Koch曲线


2. Julia集
2.1 绘制方法
在上一篇博文中提到过,点击前往
- 设定初值 p,q, 最大的迭代次数 N, 图形的大小 a,b, 及使用的颜色数 K.这里需要注意的是c的模总是小于2。可以证明当c的模大于2时,进行迭代必将发散到无穷。
- 设定区域的界值 \( M\ge max(2,\sqrt{p^2+q^2}) \)
- 将区域\(R=[-M,M]\times[-M,M]\)分成\(a\times b\)的网格,分别以每个网格点为初值(\(x_0,y_0\))。利用上面替换之后的公式做迭代。如果对\(n \le N\)所有的都有\({x_n}^2+{y_n}^2\le M^2 \),则将象素\((i, j)\)置为这一种颜色。如果从某一步 n 开始\({x_n}^2+{y_n}^2\ge M^2 \),则将象素 \((i, j)\)置为不同颜色。
2.2 Python代码实现
| |
2.3 绘制的图形
参数:p=0.285 q=0.01 N=200 M=100 a=2.0 b=2.0 step=0.005 (左图)
参数:p=0.45 q=-0.1428 N=200 M=100 a=2.0 b=2.0 step=0.005 (右图)


还有其他的初始c值可以绘制出十分漂亮的图案,例如:
c = -0.70176+-0.3842j
c = -0.835+-0.2321j
c = -0.8+0.156j
c = 0.285
3. Mandelbrot集
数学定义:
$$f_c(z) = z^2+c$$
Mandelbrot集是\(f_c(z)\)在z=0,关于复数c=x+yi的函数迭代不发散序列集合。
绘制Mandelbrot集最简单的方法是使用逃逸时间进行绘制。逃逸时间指的是,在指定范围M进行有限次数N迭代,而不超出M区域的次数。使用不同的颜色绘制不同的迭代次数。
- 设置迭代的最多次数,N
- 设置初始化\(z_0\)的值,
- 设置逃逸半径R的值,通常为2
3.1 绘制方法
3.2 Python实现
| |
3.3 绘制的图形
图中是使用参数:x0=0 y0=0 zoom=1.0 N=100 R=2 a=4.0 b=3.0 step=0.005。生成的图像。不同的是,它们依次使用的是二次、三次幂的迭代。


最后,还可以使用ImageMagick工具,将生成的图像制作成一个动态GIF。
| |

