神奇的分形艺术: Mandelbrot集和Julia集

article/2025/9/15 18:15:27
前言

这段时间看了一个关于维度的视频介绍,叹于其惊艳的多维几何体和分形的视觉动画效果。其实关于分形,已经有很成熟的分形软件和应用场景,可以参看目前流行的分形软件一览,不过没有及时更新,有些链接已经进不了,还有一个 分形艺术网。
关于分形视频的制作,有不同的制作办法,例如,这位仁兄的作品:他的思路是通过Shader渲染,然后通过ffmpeg命令把图片生成mp4视频;也可以通过专业的分形软件来做也可以在分形软件基础上定制开发;本文采用纯Python实现,借助MoviePy这个包来生成视频或者gif动画,本文只是提供有兴趣的朋友,了解这个领域,并可以动手实践体验。
本文讨论范围局限在 Mandelbrot集合和Julia集合。

Mandelbrot集合

如果英语还行,建议去维基百科读英文 Mandelbrot集合

Mandelbrot集合是一个复数c的集合,c由 z n + 1 = z n 2 + c z_{n+1}=z_{n}^2 + c zn+1=zn2+c公式在 z 0 = 0 z_0=0 z0=0开始迭代而得到。得到的值可以组成一个数列,依次为 c , c 2 + c , ( c 2 + c ) 2 + c c,c^2+c,(c^2+c)^2+c c,c2+c,(c2+c)2+c……。当该数列发散到无穷时,对应的点就属于Mandelbrot集合。Mandelbrot集合是分形中最经典例子。

c = 0 c=0 c=0 时,显然数列永远是0,并不发散,因此 c = 0 c=0 c=0 不属于Mandelbrot集合。

又如 c = 3 i c=3i c=3i 时,对应的数列为 3 i , − 9 + 3 i , 63 − 51 i , 1431 − 6477 j 3i, -9+3i, 63-51i, 1431-6477j 3i,9+3i,6351i,14316477j …. ,数字越来越庞大,因此3i就属于Mandelbrot集合。

在二维平面上,将所有不属于Mandelbrot集合的点标记为黑色,将所有属于Mandelbrot集合的点按照其发散速度赋予不同的颜色,就可以得到Mandelbrot的经典图像:
在这里插入图片描述

请注意: Mandelbrot集合是在 z 0 = 0 z_0=0 z0=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 , z 2 + c , ( z 2 + c ) 2 + c z,z^2+c,(z^2+c)^2 +c z,z2+c,(z2+c)2+c,……。如果该数列发散,对应的z集合就属于Julia集合。我们看看不同的c值下Julia图案的差别:

c = − 0.835 − 0.2321 i c = -0.835-0.2321i c=0.8350.2321i 时:
在这里插入图片描述

c = 0.285 − 0.01 i c = 0.285 - 0.01i c=0.2850.01i 时::
在这里插入图片描述

c = − 0.8 + 0.156 i c = -0.8 + 0.156i c=0.8+0.156i,图案又变得完全不同:
在这里插入图片描述

c = − 0.835 − 0.2321 i c = -0.835 - 0.2321i c=0.8350.2321i,图案又变得完全不同:
在这里插入图片描述

c = 0.70176 − 0.3842 i c = 0.70176 - 0.3842i c=0.701760.3842i,图案成为树状:
在这里插入图片描述

生成Julia集合的动画

在Julia集合中,每次都对c的值进行微小的改变,并将依次生成图片制作为gif,就可以生成如下所示的动画: 从这里下载观看, 好像不允许上传gif。程序中提供了一个width参数,可以修改它以生成更大尺寸,质量更高的动画图像。

代码实现

代码采用TensorFlow实现, 比较简单,可以从这里下载代码。希望你能点赞,反馈,谢谢!


http://chatgpt.dhexx.cn/article/51vvLCEj.shtml

相关文章

MATLAB | 分形的艺术——(Mandelbrot)曼德勃罗特集合

PART.0 Mandelbrot 介绍 “无规则的碎片” “魔鬼的聚合物” “上帝的指纹” Mandelbrot集合有着多种称谓,那么什么是曼德勃罗特集?Mandelbrot集合可以用复二次多项式: f c ( z ) z 2 c f_c(z)z^2c fc​(z)z2c 来表示,其中c是…

神奇的Python-实现曼德布洛特(Mandelbrot)集合(一行代码,matplotlib numpy,tensorflow)分别实现

神奇的Python-实现曼德布洛特(Mandelbrot)集合(一行代码,matplotlib numpy,tensorflow)分别实现 Mandelbrot图实际上是由Mandelbrot集合构成的图像。 Mandelbrot集合的定义如下: z n 1 z n 2 c z_{n1}z^2_nc zn1​zn2​c 其中&#xff…

曼德勃罗集(Mandelbrot Set)

先来膜拜一下大神! 曼德勃罗(Benoit B. Mandelbrot),数学家、经济学家,分形理论的创始人。1924年生于波兰华沙;1936年随全家移居法国巴黎,在那里经历了动荡的二战时期;1948年在帕萨迪纳获得航空硕士学位&am…

用matlab画Mandelbrot(曼德布罗特)图

Mandelbrot图实际上是由Mandelbrot集合构成的图像。 Mandelbrot集合的定义如下: zn1z2nc 其中,c是一个复数。加入给定一个复数 z0 ,比如 z00 ,那么这个递推式会生成一个序列: [z0,z1,z2,z3,...] 。如果这个序列收敛…

Mandelbrot 并行实现

最近要交并行计算的作业了,这周终于把作业写了个大概,这期间感觉学了不少东西,总结一下。 Mandelbrot Set 背景 前几天逛维基百科的时候看到了如下的消息:著名数学家、分形之父Benot B. Mandelbrot(中文名本华曼德博)美国时间10月15日辞世,享年85岁。 “1979年,在哈…

Mastering Qt 5 学习笔记-Mandelbrot

是一个 Mandelbrot 分形的多线程计算。 用户将看到分形,并能够在该窗口中平移和缩放。Mandelbrot 分形是一个处理复数 (a bi) 的数值集,该图像中的每个黑色像素都趋向于发散到一个无限值,,而绿色像素则有界于一个有限值。绿色像素…

Mandelbrot集合及其渲染

什么是Mandelbrot集合? Mandelbrot集合是在复数平面上组成分形的点的集合,它正是以数学家Mandelbrot命名。 Mandelbrot集合可以用复二次多项式\[ f_c(z)z^2c \] 来定义 其中c是一个复数。对于每一个c,从\(z 0\),开始对\(f_c(z)\)进行迭代。 …

分形之父 Mandelbrot

著名数学家,被誉为分形之父的Mandelbrot先生,美国时间10月15日在马萨诸塞州剑桥辞世,享年85岁。他用“美丽”改变了我们的世界观,他被认为是20世纪后半叶少有的影响深远而且广泛的科学伟人之一,1993年他获得沃尔夫物理…

Ettercap系列 II:基于命令行界面(结合driftnet截获目标机器正在浏览的图片)

相信跟着这个系列走,一直看到这篇文章的读者已经了解了基于图形化Ettercap的操作,并对Arp欺骗和Ettercap相关的术语有所了解。本篇就如何在命令行界面下操作ettercap,以实现与图形化界面相同的效果展开讨论。可能你会不解:既然我已…

无线局域网的嗅探攻击和防御——ettercap+driftnet

 无线局域网的嗅探攻击和防御 -----ettercapdriftnet 1 实验要求和目的 ●了解局域网转发数据的规则与协议 ●了解抓包软件的原理与操作流程 ●对网络中数据传输的协议有更深层次的认识 2 实验原理和背景知识 2.1 抓包软件与分析软件 本次嗅探试验所…

python实现图片嗅探工具——自编driftnet

python实现图片嗅探工具——自编driftnet 前言一、数据包嗅探二、图片捕获三、图片显示及主函数写在最后 前言 想必尝试过中间人攻击(MITM)的小伙伴,大概率是知道driftnet的。这是一款简单使用的图片捕获工具,可以很方便的从网络数据包中抓取…

kali中 arpspoof、driftnet、流量转发的图片抓取

1、开启内核转发模式(echo 1为转发 echo 0为拦截) echo 1 /proc/sys/net/ipv4/ip_forward 配置完成使用命令查看cat /proc/sys/net/ipv4/ip_forward 2、使用 Arpspoof 开始攻击 命令:Arpspoof -i (自己网卡) -t 目标IP 网关 3、打开另一个终端 查看dri…

ARP欺骗攻击(流量图片)——dsniff与driftnet使用

ARP欺骗攻击(流量&图片) 原理: 首先我们![请添加图片描述](https://img-blog.csdnimg.cn/7de7923387224bcda1ea4be958032ae9.png 要明白何为ARP(地址解析协议):是根据 IP地址 获取 物理地址 的一个 TC…

NO.26——利用ettercap和driftnet截获数据流里的图片

原理 Ettercap最初设计为交换网上的sniffer,但是随着发展,它获得了越来越多的功能,成为一款有效的、灵活的中介攻击工具。它支持主动及被动的协议解析并包含了许多网络和主机特性(如OS指纹等)分析。 Ettercap…

linux嗅探器抓包,Kali Linux 嗅探/欺骗工具 driftnet 教程

日期:2018年01月11日 观看: 13,491 C 次 Driftnet是一个监听网络流量并从它观察到的TCP流中提取图像的程序。有趣的是看到很多网络流量的主机上运行。在实验性增强中,driftnet现在从网络流量中挑选出MPEG音频流,并尝试播放它们。 Driftnet是一款从网络流量捕获图像并将其显…

ARP中使用driftnet工具捕获图片

在进行任何网络攻防实验时,请务必遵守当地法律法规以及道德准则,必须遵守法律规定,只能在合法授权的情况下进行实验和演练。 预备知识 基本网络概念:了解TCP/IP协议、IP地址、MAC地址等基本网络概念。 ARP协议:了解A…

使用Arp欺骗与driftnet工具监听局域网信息

【重点声明】此系列仅用于工作和学习,禁止用于非法攻击,非法传播。一切遵守《网络安全法》 环境: Ubuntu 16.0.4攻击主机:192.168.1.130,Windows10 目标机:192.168.1.219 扫描该网段存活的主机&#xff1…

(arpspoof + driftnet)实现arp欺骗

(arpspoof driftnet)实现arp欺骗 虚拟机环境:kali linux window 7 文章目录 (arpspoof driftnet)实现arp欺骗前言一、安装arpspoof和driftnet二、Attack1.信息收集2.MAC欺骗与流量截图 总结 前言 ARP欺骗:欺骗局域网内主机的网关MAC地址&#xff0c…

自举电路介绍

自举电路也叫升压电路,利用自举升压二极管,自举升压电容等电子元件,使电容放电电压和电源电压叠加,从而使电压升高.有的电路升高的电压能达到数倍电源电压。 升压电路原理 举个简单的例子:有一个12V的电路&#xff0c…

秒懂电容自举电路

自举电容的核心原理是:电容两端电压不能突变。 从这句话中,我们可以获取到两个关键字:两端电压、不能突变。 两端电压指的是电容一边相对另一边的电压,我们知道电压本身就是个参考值(一般认定参考GND,认定…