研究性学习 - 简单分形几何图形的性质及作法研究

课题标题:《简单分形几何图形的性质及作法研究》

分形(fractal)是一个粗糙零碎的几何形状,
可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状,
即具有自相似的性质.


引入

分形是空间上的混沌,混沌是时间上的分形

1861 年,德国数学家魏尔施特拉斯(Karl Theodor Wilhelm Weierstraβ)发现了一个函数:

其中$0<a<1,b$为正奇数,且$ab>1+\dfrac{3}{2}\pi$

它的图像如下:

由于 Mathematica 求和无限级数出现提示无法收敛的情况,假定无限大为 1000,此处取a = 0.8b = 11

Mathematica 代码
1
Plot[Sum[0.8 ^ i * Cos[11 ^ i * Pi * x], {i, 0, 1000}], {x, -100, 100}]

而且此函数不可导,这意味着它的每一个点都是拐点!这和当时人们认为万物可导的观点相悖,因此,分形几何学应运而生


弦图分形

想必大家都知道赵爽弦图,它的中央会有一个较小的正方形,如果我们在这个正方形中按照同样的比例绘制赵爽弦图,会怎么样呢?

(电脑性能缘故,此处迭代 50 次)

绘制工具:几何画板


科赫曲线

科赫曲线 (Koch snowflake) 是一种分形. 其形态似雪花,又称科赫雪花、雪花曲线.
其豪斯多夫维度是 $\log_34$ 维

生成方法

给定线段 AB,步骤如下

  1. 将线段分成三等份(AC, CD, DB)
  2. 以 CD 为底,向外(内外随意)画一个等边三角形 DMC
  3. 将线段 CD 移去
  4. 分别对 AC,CM,MD,DB 重复 1 ~ 3 的步骤.

面积公式

注:此处的面积指科赫曲线边缘围成的封闭图形的面积

首先,我们很容易得到边长为 a 的正三角形的面积公式:

每经过一次迭代,边数 N 变为原来的 4 倍,N 也是新增小正三角形的个数.

新增的小正三角形边长变为原来的 $\dfrac{1}{3}$

可得,迭代 n 次科赫曲线的面积为:

我们求其极限:

即科赫曲线面积为 $\dfrac{2}{5}\sqrt{3}a^2$


曼德勃罗集

“人类有史以来做出的最奇异,最瑰丽的几何图形”

$Z_{i + 1} = Z_{i}^2 + C(Z,C\in\mathbf{C}$, 自变量是 $C)$

曼德勃罗集(Mandelbrot)就是所有使得该式无限迭代后的结果能保持有限数值(即收敛)的复数 C 的集合

对于集合中的每一个元素,将其画在复平面上,可得曼德勃罗集的图形

以下为各种平台曼德勃罗集的画法

几何画板

录制耗时:4.5h,压缩耗时:2h,加速耗时:30min

最终结果如下

优点: 较为直观,不需要太深的计算机知识

缺点: 太慢了(gif 已经加速 10 倍了),若提速清晰度会降低,而且放大无法保证清晰度

C++

制作耗时:10min,运行耗时:≈0

Mandelbrot C++ 源码

优点: 速度极快,代码相对简单,后期上色处理容易

缺点: 清晰度不高,实现无限放大不易,有亿点丑(

Python

注:程序来自网络

运行耗时:10min(1000 × 1000), 30min(10000 × 10000)

内存消耗:未记录(1000 × 1000),3.5G(10000 × 10000)

使用 python 库 matplotlib 绘制图像,支持放大

优点: 速度较快,清晰度较高,支持放大

缺点: 耗电脑 CPU,若清晰度高,耗时无法接受,不能无限放大

Ultra Fractal

我用 Ultra Fractal 自带的曼德勃罗分形动画导出了视频

运行耗时:8h,压缩耗时:2h

压缩前视频大小:4G,压缩后视频大小:13MB

图片 & Gif

以下 gif 显示曼德勃罗集的各点对应的朱利亚集

视频

部分生成日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2020/1/19 12:52:07: Starting job Mandelbrot Zoom.
2020/1/19 12:52:07: Anti-aliasing on. Threshold: 0.10. Depth: 1. Subdivisions: 3x3.
2020/1/19 12:52:07: Motion blur on. Amount: 50.0%.
2020/1/19 12:52:07: Rendering in AVI format. Quality: 100%.
2020/1/19 12:52:07: Calculating MandelbrotZoom in C:\Users\Xecades\Documents\Ultra Fractal 6\Parameters\Animation Examples.upr.
2020/1/19 12:52:07: Calculating frame 1.
2020/1/19 12:52:12: Calculating frame 2.
2020/1/19 12:52:15: Calculating frame 3.
2020/1/19 12:52:19: Calculating frame 4.
2020/1/19 12:52:24: Calculating frame 5.
2020/1/19 12:52:27: Calculating frame 6.
2020/1/19 12:52:31: Calculating frame 7.
2020/1/19 12:52:35: Calculating frame 8.
2020/1/19 12:52:39: Calculating frame 9.
2020/1/19 12:52:44: Calculating frame 10.
2020/1/19 12:52:49: Calculating frame 11.
2020/1/19 12:52:54: Calculating frame 12.
2020/1/19 12:53:00: Calculating frame 13.
2020/1/19 12:53:06: Calculating frame 14.
2020/1/19 12:53:13: Calculating frame 15.
2020/1/19 12:53:20: Calculating frame 16.
2020/1/19 12:53:29: Calculating frame 17.
2020/1/19 12:53:37: Calculating frame 18.
2020/1/19 12:53:45: Calculating frame 19.
2020/1/19 12:53:53: Calculating frame 20.
...
2020/1/19 20:58:58: Calculating frame 1000.
2020/1/19 20:59:15: Finished calculation. Time: 8:07:07.91.
2020/1/19 20:59:15: Saving to C:\Users\Xecades\Desktop\Mandelbrot Zoom.avi.
2020/1/19 20:59:54: Job finished.

朱利亚集

朱利亚集合(Julia set)是一个在复平面上形成分形的点的集合.
以法国数学家加斯顿·朱利亚(Gaston Julia)的名字命名.

其迭代规则为:

$Z_{i + 1} = Z_{i}^2 + C(Z,C\in\mathbf{C}$, 自变量是$Z_0)$

其余规则和曼德勃罗集无异


引用 & 支持

Reference:

Proposer: @WXR

本文作者:Xecades

本文链接:https://blog.xecades.xyz/articles/fractal/

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。

评论