神奇的分形艺术: Mandelbrot集和Julia集
前言
这段时间看了一个关于维度的视频介绍,叹于其惊艳的多维几何体和分形的视觉动画效果。其实关于分形,已经有很成熟的分形软件和应用场景,可以参看目前流行的分形软件一览,不过没有及时更新,有些链接已经进不了,还有一个 分形艺术网。
关于分形视频的制作,有不同的制作办法,例如,这位仁兄的作品:他的思路是通过Shader渲染,然后通过ffmpeg命令把图片生成mp4视频;也可以通过专业的分形软件来做也可以在分形软件基础上定制开发;本文采用纯Python实现,借助MoviePy这个包来生成视频或者gif动画,本文只是提供有兴趣的朋友,了解这个领域,并可以动手实践体验。
本文讨论范围局限在 Mandelbrot集合和Julia集合。
Mandelbrot集合
如果英语还行,建议去维基百科读英文 Mandelbrot集合
Mandelbrot集合是一个复数c的集合,c由 zn+1=zn2+cz_{n+1}=z_{n}^2 + czn+1=zn2+c公式在z0=0z_0=0z0=0开始迭代而得到。得到的值可以组成一个数列,依次为 c,c2+c,(c2+c)2+cc,c^2+c,(c^2+c)^2+cc,c2+c,(c2+c)2+c……。当该数列发散到无穷时,对应的点就属于Mandelbrot集合。Mandelbrot集合是分形中最经典例子。
如 c=0c=0c=0 时,显然数列永远是0,并不发散,因此 c=0c=0c=0 不属于Mandelbrot集合。
又如c=3ic=3ic=3i 时,对应的数列为3i,−9+3i,63−51i,1431−6477j3i, -9+3i, 63-51i, 1431-6477j3i,−9+3i,63−51i,1431−6477j …. ,数字越来越庞大,因此3i就属于Mandelbrot集合。
在二维平面上,将所有不属于Mandelbrot集合的点标记为黑色,将所有属于Mandelbrot集合的点按照其发散速度赋予不同的颜色,就可以得到Mandelbrot的经典图像:
请注意: Mandelbrot集合是在z0=0z_0=0z0=0时,不断的迭代c得到。
在生成的Mandelbrot集合中,我们可以将图像放大,选取某些区域进行生成,就可以得到格式各样造型迥异的分形图案。在Mandelbrot集合中,有很多地方图案比较奇特,如下图中的3个位置。
其中编号为2的地方被称为“Elephant Valley”,因为此处的图案与大象很像,直接运行可以得到该区域的图像:
# Elephant Valleyfractal.gen_mandelbrot(fractal.set_data(x_tuple=(.275, .28),y_tuple=(.006, .01)),rgb=(.9, .6, .6)).save("mandelbrot_area.png")
编号为3的地方被称为“Triple Spiral Valley”(三重螺旋),在mandelbrot_area.py修改一下坐标位置为(ratio调整的是颜色):
# 三重螺旋
fractal.gen_mandelbrot(fractal.set_data(x_tuple=(-.09, -.086),y_tuple=(.654, .657)),rgb=(.2, .6, .6)).save("mandelbrot_3.png")
就可以得到该处的图案:
最后编号为1的地方被称为“Seahorse Valley”(海马山谷),对应的坐标为:
# Seahorse Valley(海马山谷)fractal.gen_mandelbrot(fractal.set_data(x_tuple=(-.75, -.747),y_tuple=(.099, .102)),rgb=(.1, .1, .3)).save("mandelbrot_sea.png")
图像如下,确实和海马有一点神似:
Julia集合
如果英语还行,建议去维基百科读英文 Julia集合
Julia集合和Mandelbrot集合差不多,但这次我们固定c,转而计算发散的z的值。即c是固定的常数(可以任取),数列变成z,z2+c,(z2+c)2+cz,z^2+c,(z^2+c)^2 +cz,z2+c,(z2+c)2+c,……。如果该数列发散,对应的z集合就属于Julia集合。我们看看不同的c值下Julia图案的差别:
c=−0.835−0.2321ic = -0.835-0.2321ic=−0.835−0.2321i 时:
c=0.285−0.01ic = 0.285 - 0.01ic=0.285−0.01i 时::
c=−0.8+0.156ic = -0.8 + 0.156ic=−0.8+0.156i,图案又变得完全不同:
c=−0.835−0.2321ic = -0.835 - 0.2321ic=−0.835−0.2321i,图案又变得完全不同:
c=0.70176−0.3842ic = 0.70176 - 0.3842ic=0.70176−0.3842i,图案成为树状:
生成Julia集合的动画
在Julia集合中,每次都对c的值进行微小的改变,并将依次生成图片制作为gif,就可以生成如下所示的动画: 从这里下载观看, 好像不允许上传gif。程序中提供了一个width参数,可以修改它以生成更大尺寸,质量更高的动画图像。
代码实现
代码采用TensorFlow实现, 比较简单,可以从这里下载代码。希望你能点赞,反馈,谢谢!
神奇的分形艺术: Mandelbrot集和Julia集相关推荐
- matlab julia分形图,Mandelbrot集和Julia集的分形图之matlab实现
Mandelbrot集和Julia集的分形图之matlab实现 基于逃逸时间算法 1. Mandelbrot集 function Mandelbrot(res,iter,xc,yc,xoom) %Ma ...
- 分形:MandelBrot和Julia
分形:MandelBrot和Julia MandelBrot MandelBrot点是构造这样的一个集合:对于复平面上任意点z, x(0) = 0,使用公式x(n+1) = x(n)^2 + z迭代, ...
- 神奇的分形艺术(四):Julia集和Mandelbrot集
考虑函数f(z)=z^2-0.75.固定z0的值后,我们可以通过不断地迭代算出一系列的z值:z1=f(z0), z2=f(z1), z3=f(z2), ....比如,当z0 = 1时,我们可以依次迭代 ...
- python分形几何_使用 Python 绘制分形: Koch 曲线、Julia 集、Mandelbrot 集
目录 1. Koch曲线 瑞典数学家Helge von Koch,在1904年发表的"从初等几何构造的一条没有切线的连续曲线"的论文中提出Korch曲线.它的描述如下:指定一条线段 ...
- C语言画分形之Julia集
最强大脑第四季有一位选手余彬晶挑战的就是"分形之美",项目使用的是分形之Julia集,感兴趣的话可以看看 .下面进入正题: 分形 目前常用的造型技术 分形几何 背景 概念 对模型的 ...
- 新人如何学分形艺术(第二版)
曾经写过这样一篇文章,以下是链接 分形其实很简单[新手如何学分形?] 这是前年网站刚开放不久 我尽全力写下来的 那时的我同现在的你们一样刚刚学分形 懂的也很少 但时间如梭 一年半过去了 这期间我也成长 ...
- python绘制动态Julia集,超炫酷
Julia集 此Julia非彼Julia,指的是对于某复数ccc,使得迭代式f(z)=z2+cf(z)=z^2+cf(z)=z2+c收敛的复数zzz的集合.例如,当c=0c=0c=0时,那么其收敛区间 ...
- 训练集 测试集 验证集_Python机器学习实战:划分训练集和检验集
机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念.我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题. 本文来自<数 ...
- Mandelbrot vs Julia
前言: 首先先简单介绍一下Mandelbrot集,该集被曼德布罗特教授称之为"魔鬼的聚合物",也被大家称之为"上帝的指纹".之所以这么称呼, ...
- 《分形艺术,宇宙之笔,时光之诗!》作者:林晨 风达
宇宙之笔,时光之诗! --走进分形艺术 作者:林晨 风达 发表于:中国艺术报 向日葵与斐波那契数列图案 也许您在哪见过这类图形,它们有着令人惊讶的形状,结构精美,富有哲理,蕴含着神秘的美感.挺吸引眼 ...
最新文章
- tomcat安装及虚拟web主机
- 美团副总裁夏华夏:科技应该为每一个普通人服务,要做“接地气的AI” | MEET2021...
- 旷视5号员工陈可卿:1991生于绍兴、10岁买电脑改变命运,信息奥赛金牌保送清华...
- mysql数据库检表_MYSQL数据库检查数据表和修复数据表
- 漫步者蓝牙驱动_有什么平价好用的蓝牙耳机?双11不踩雷高性价比蓝牙耳机推荐...
- gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景
- linux 启动一个网站_在线试用 200 多种 Linux 和 Unix 操作系统
- c++ cstring 转换 char_Java基本数据类型的介绍及其转换(内附字符串与多种数据之间的转换)...
- 组件和高阶组件区别_为什么要对高阶组件使用代码拆分
- 列表与元组——Python基础语法
- 动态磅是怎么原理_浅谈动态地磅的原理及未来发展方向
- 9-4NOIP模拟赛总结
- 【C】C99 restrict 关键字
- atitit.eclipse有多少api 扩展点,以及扩展点的设计
- APP测试—专项测试概念
- wpa_supplicant使用
- 第8章 集成Log4J日志
- NB-IOT 技术总结
- 幅度调制(线性调制)原理
- 台式计算机怎么强制关机,台式电脑怎么强制关机