前言

这段时间看了一个关于维度的视频介绍,叹于其惊艳的多维几何体和分形的视觉动画效果。其实关于分形,已经有很成熟的分形软件和应用场景,可以参看目前流行的分形软件一览,不过没有及时更新,有些链接已经进不了,还有一个 分形艺术网。
关于分形视频的制作,有不同的制作办法,例如,这位仁兄的作品:他的思路是通过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集相关推荐

  1. matlab julia分形图,Mandelbrot集和Julia集的分形图之matlab实现

    Mandelbrot集和Julia集的分形图之matlab实现 基于逃逸时间算法 1. Mandelbrot集 function Mandelbrot(res,iter,xc,yc,xoom) %Ma ...

  2. 分形:MandelBrot和Julia

    分形:MandelBrot和Julia MandelBrot MandelBrot点是构造这样的一个集合:对于复平面上任意点z, x(0) = 0,使用公式x(n+1) = x(n)^2 + z迭代, ...

  3. 神奇的分形艺术(四):Julia集和Mandelbrot集

    考虑函数f(z)=z^2-0.75.固定z0的值后,我们可以通过不断地迭代算出一系列的z值:z1=f(z0), z2=f(z1), z3=f(z2), ....比如,当z0 = 1时,我们可以依次迭代 ...

  4. python分形几何_使用 Python 绘制分形: Koch 曲线、Julia 集、Mandelbrot 集

    目录 1. Koch曲线 瑞典数学家Helge von Koch,在1904年发表的"从初等几何构造的一条没有切线的连续曲线"的论文中提出Korch曲线.它的描述如下:指定一条线段 ...

  5. C语言画分形之Julia集

    最强大脑第四季有一位选手余彬晶挑战的就是"分形之美",项目使用的是分形之Julia集,感兴趣的话可以看看 .下面进入正题: 分形 目前常用的造型技术 分形几何 背景 概念 对模型的 ...

  6. 新人如何学分形艺术(第二版)

    曾经写过这样一篇文章,以下是链接 分形其实很简单[新手如何学分形?] 这是前年网站刚开放不久 我尽全力写下来的 那时的我同现在的你们一样刚刚学分形 懂的也很少 但时间如梭 一年半过去了 这期间我也成长 ...

  7. python绘制动态Julia集,超炫酷

    Julia集 此Julia非彼Julia,指的是对于某复数ccc,使得迭代式f(z)=z2+cf(z)=z^2+cf(z)=z2+c收敛的复数zzz的集合.例如,当c=0c=0c=0时,那么其收敛区间 ...

  8. 训练集 测试集 验证集_Python机器学习实战:划分训练集和检验集

    机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念.我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题. 本文来自<数 ...

  9. Mandelbrot vs Julia

              前言: 首先先简单介绍一下Mandelbrot集,该集被曼德布罗特教授称之为"魔鬼的聚合物",也被大家称之为"上帝的指纹".之所以这么称呼, ...

  10. 《分形艺术,宇宙之笔,时光之诗!》作者:林晨 风达

    宇宙之笔,时光之诗! --走进分形艺术 作者:林晨 风达  发表于:中国艺术报 向日葵与斐波那契数列图案 也许您在哪见过这类图形,它们有着令人惊讶的形状,结构精美,富有哲理,蕴含着神秘的美感.挺吸引眼 ...

最新文章

  1. tomcat安装及虚拟web主机
  2. 美团副总裁夏华夏:科技应该为每一个普通人服务,要做“接地气的AI” | MEET2021...
  3. 旷视5号员工陈可卿:1991生于绍兴、10岁买电脑改变命运,信息奥赛金牌保送清华...
  4. mysql数据库检表_MYSQL数据库检查数据表和修复数据表
  5. 漫步者蓝牙驱动_有什么平价好用的蓝牙耳机?双11不踩雷高性价比蓝牙耳机推荐...
  6. gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景
  7. linux 启动一个网站_在线试用 200 多种 Linux 和 Unix 操作系统
  8. c++ cstring 转换 char_Java基本数据类型的介绍及其转换(内附字符串与多种数据之间的转换)...
  9. 组件和高阶组件区别_为什么要对高阶组件使用代码拆分
  10. 列表与元组——Python基础语法
  11. 动态磅是怎么原理_浅谈动态地磅的原理及未来发展方向
  12. 9-4NOIP模拟赛总结
  13. 【C】C99 restrict 关键字
  14. atitit.eclipse有多少api  扩展点,以及扩展点的设计
  15. APP测试—专项测试概念
  16. wpa_supplicant使用
  17. 第8章 集成Log4J日志
  18. NB-IOT 技术总结
  19. 幅度调制(线性调制)原理
  20. 台式计算机怎么强制关机,台式电脑怎么强制关机

热门文章

  1. C#多个DataTable根据某一列匹配,其余字段相加求和的高效算法。
  2. elasticsearch 版本区别
  3. uni-app 压缩图片
  4. 请在微信客户端中打开链接是什么鬼 ?
  5. php 限制字数_PHP中如何正确统计中文字数
  6. js中this指向学习总结
  7. 我的关于 **Mermaid** 语法
  8. html手机分辨率选择,怎么看手机分辨率(手机屏幕分辨率多少才合适?)
  9. linux在文件夹压缩,在linux下如何将文件夹压缩成.tgz文件
  10. Cortex-M0芯片GPIO详解