分形简单来说就是具有自相似性质的图形, 其Hausdorff 维度一般来说是分数的, 与常规认知的维度不同. 我虽然很早就接触过分形, 但是并没有画过分形的图, 这里写一下画分形的代码…先介绍一个简单的分形图形, 再说说经典的Julia集合, Kuch 雪花曲线等等

分形树

从左到右迭代次数依次变大

这个图形构造起来其实很容易, 首先讲一个线段三等分, 然后取这两个点分别逆时针和顺时针旋转\(\frac{\pi}{3}\)向外延伸线段长度的\(\frac{1}{3}\), 接着将伸出来的树枝当做树干递归这一操作即可.

虽然这个图形很简单, 但是也包含了分形必要的性质, 包括递归的构造, 局域与整体的自相似性.

Julia set

Julia 集合是通过一个复函数迭代生成的图案, 最经典的是二次函数: $$f(z) = z^2 + C$$ \(C\) 的取值不同可以得到各种各样很漂亮的分形图形. 下图便是

$$f(z) = z^2 + 0.7885e^{i\theta}$$

迭代出来的图案, 其中\(\theta \in [0, 2\pi]\).

可以看到在某些临界点, 参数\(C\)的微小变化就可以引起整个图案的变化, 这主要由于迭代的非线性导致的.

Kuch 雪花曲线

该曲线即从一个正三角形出发, 取其每个边的三等分点向外延伸出一个等边三角形, 不断重复这一操作就可以出现下图效果.

分形的维度的定义

下面介绍几种对分形维度的定义, 其定义彼此是等价的.

Hausdorff 维度

该维度的定义基础一般欧几里得空间对维度的理解的推广, 以一个正方形为例, 假设其边长为\(a\), 我们可以描述其测度为\(a^{2}\), 也就相当于面积; 但是当其边长扩大为原来的2倍时, 面积变成原来的4倍, 由于 $$2^{\color{red} 2} = 4$$

这里2便是一个正方形的维度, 类似的立方体的维度便为3. 注意到该定义是可以推广的, 我们将一个图形扩大为原先的2倍, 其测度是原先的\(k\)倍, 那么该图形的维度即为 $$D = \log_2{k}$$

例如 Sierpinski三角形

这个图我就不想画了, 盗一波wiki的图, 该三角形变大一倍, 其面积变成原先的\(3\)倍, 所以维度是\(\log_2{3}\)

相似维度

如果我们把一个正方形均分成四份, 每个小的正方形边长为是原先的\(\frac{1}{2}\), 注意到 $$4*\left(\frac{1}{2}\right)^{\color{red} 2} = 1$$ 表示局部与整体的相似关系. 而对于Kuch 雪花曲线, 每条边由与整体相似的\(4\)个小的局部构成, 但是每个部分是整体的\(\frac{1}{3}\), 所以维度即为

$$4 * \left(\frac{1}{3}\right)^{\color{red} D_{f}} = 1$$

所以:

$$D_{f} = \log_3{4}$$