Python3 趣味系列题14----分形

Python3 趣味系列题14----分形_第1张图片
julia_140.png

分形(Fractal)一词,是由美国数学家曼德勃罗先生(Mandelbrot)创造出来的。分形几何学是一门以非规则几何形态为研究对象的几何学。按照分形几何学的观点,一切复杂的对象虽然看似杂乱无章,但他们具有相似性。简单地说,就是把复杂对象的某个局部进行放大,其形态和复杂程度与整体相似。

本文给出基于复动力系统,例如Mandelbrot集、Julia集;基于迭代函数系统,例如科赫雪花、谢尔宾斯基三角形。

一、基于复动力系统

因为复数可以用平面直角坐标系上的点来表示。横坐标轴表示复数的实数部分,纵坐标轴表示复数的虚数部分,则复数 A+Bi就对应了平面上的点 (A, B),其中复数A+Bi的模就是A^2 + B^2 的算数平方根。这个平面直角坐标系也就成为了复平面。

  • Julia集

所谓Julia集就是复平面上的点经过如下形式:

image

的无数次迭代得到的复数的模不大于2的点构成的集合。其中Z代表复平面上的点,C是任意的复数。对于不同的C值,不同的迭代次数,所得到的图像是不同的。下面给出几种不同的C值对应的图像。之所以限定模值为2,是因为随着迭代次数的增大,模大于2的点肯定会发散。为了图片的美观,根据不同的模值定义不同的颜色。

Python3 趣味系列题14----分形_第2张图片
image
Python3 趣味系列题14----分形_第3张图片
image
  • Mandelbrot集

生成Mandelbrot集和Julia集的原理是类似的,唯一的不同在于,迭代的表达式变为:

image

其中Z0表示复平面上的每个点。计算Mandelbrot集,也就是记录每个点在迭代过程中得到的复数的模值大于2时的迭代次数,然后根据迭代次数进行绘图,不同的迭代次数用不同的颜色表示,即可绘制出图。

在Julia集中,C值是任意给定的复平面上的一点,对于所有复平面上的点Z而言,都是一样的。而Mandelbrot集中C就是该点Z,对于所有复平面上的点Z而言,都是不一样的。Julia集每个图形表示的是一个C值,而C值肯定是Z0值中的一个。因此Mandelbrot集是Julia集的高度概括,也就是任意一个C值对应的Julia图形,肯定可以在Mandelbrot集的图形中找到与其对应的图像。下面给出Mandelbrot集的图像:

Python3 趣味系列题14----分形_第4张图片
image

下面给出

image

时的Mandelbrot集的图像:

Python3 趣味系列题14----分形_第5张图片
image

下面给出次数为2时的Mandelbrot集局部放大时的图像:

Python3 趣味系列题14----分形_第6张图片
image
image

二、基于迭代函数

基于迭代函数就是根据一定的规则,迭代生成分形图像。下面以谢尔宾斯基三角形和科赫雪花为例:

  • 谢尔宾斯基三角形

由波兰数学家谢尔宾斯基在1915年提出。

迭代规则:

1,取一个底色为黑色的三角形,一般为等边三角形;
2,沿三边中点的连线,将它分成四个小三角形;
3,将中间的那一个小三角形底色变为白色;
4,对其余三个小三角形重复步骤2,3;
5,重复以上步骤;

图示:

Python3 趣味系列题14----分形_第7张图片
image

除了迭代法之外,也可以利用随机的方法获得。

随机方法规则:

1,在平面上选取3个点,并标出,为了美观,这3个点可以为等边三角形的顶点;
2,在平面上任意选取一个点作为第4个点,作为候选点,在平面上标出;
3,在数字1,2,3中随机选择一个数字。数字1,2,3的分别点1,2,3对应;
4,选中的点和当前候选点的中点作为新的候选点,并在平面上标出;
5,重复步骤3,4;

图示:

Python3 趣味系列题14----分形_第8张图片
image
  • 科赫雪花曲线

最早出现在海里格·冯·科赫1904年的论文中。

规则:

1,对于一个等边三角形,把每一边都三等分;
2,将每个边的中间一段,向外旋转60度,作为等边三角形的一边,绘制出等边三角形;
3,将中间的这一段去掉;
4,重复上述步骤;

图示:

Python3 趣味系列题14----分形_第9张图片
image

点击获得更多趣味谜题以及基于Python3的解决方案代码。欢迎Follow,感谢Star!!! 扫描关注微信公众号 pythonfan,获取更多。

image
image

你可能感兴趣的:(Python3 趣味系列题14----分形)