广义曼德勃罗特集的探索与交互式可视化

简介: 这篇文章介绍了如何使用Python和matplotlib库创建广义曼德勃罗特集的交互式可视化。作者探讨了曼德勃罗特集的基本概念,包括其自相似性和复杂边界,并扩展到广义集合,其中幂运算指数可以是任意复数。通过提供的Python代码示例,读者可以学习如何绘制并实现鼠标驱动的放大缩小功能,从而深入探索这个数学结构的细节。文章鼓励读者修改指数以观察不同形态,并提供了相关参考资料链接。


该文章是我在2014年发布在某sdn的,搬运过来。


广义曼德勃罗特集的探索与交互式可视化


引言

曼德勃罗特集(Mandelbrot Set)以其复杂的边界和无限的自相似性而闻名,它是分形几何中的一个经典实例,展现了数学与艺术的完美结合。本篇文章将引导你通过Python编程,结合matplotlib库,实现广义曼德勃罗特集的可视化,并添加放大缩小功能,使读者能够互动探索这个数学奇观的细节。


广义曼德勃罗特集的定义

传统的曼德勃罗特集由复数 c 的集合构成,对于每一个 c,若序列 𝑧𝑛+1=𝑧𝑛^2+𝑐 对于任意 n 都保持有界,则 c 属于曼德勃罗特集。然而,在广义曼德勃罗特集中,幂运算的指数可以是任意复数,例如 1+5𝑗,这为我们打开了探索更多奇异结构的大门。


image.png


Python 实现

首先,我们需要导入必要的Python库,包括numpy用于数值计算,matplotlib用于绘图,以及time库用于测量绘制时间。

Python

1import numpy as np
2import matplotlib.pyplot as plt
3from matplotlib import cm
4import time

接着,定义绘制广义曼德勃罗特集的函数,这里我们使用了两种方法来实现,一种是基于迭代次数的规范化处理,另一种则是基本的迭代绘制。

Python

1def draw_mandelbrot2(cx, cy, d, N=600):
2    x0, x1, y0, y1 = cx-d, cx+d, cy-d, cy+d 
3    y, x = np.ogrid[y0:y1:N*1j, x0:x1:N*1j]
4    c = x + y*1j
5    smooth_mand = np.frompyfunc(smooth_iter_point,1,1)(c).astype(np.float)
6    plt.imshow(smooth_mand, cmap=cm.Blues_r, extent=[x0,x1,y1,y0])
7    plt.axis('off')
8    plt.show()
9
10def smooth_iter_point(c):
11    z = c
12    d = 1+5j  # 幂运算的指数
13    for i in range(1, 20):
14        if abs(z) > 10: break 
15        z = z**d + c
16    absz = abs(z)
17    if absz > 2.0:
18        mu = i - log(log(abs(z),2),2)
19    else:
20        mu = i
21    return mu

为了增加交互性,我们利用matplotlib的事件处理机制,实现基于鼠标的放大和缩小功能。

Python

1def on_press(event):
2    global g_size
3    if not (event.xdata and event.ydata):
4        return
5    if event.button == 1:  # 左键:放大
6        g_size /= 2
7    elif event.button == 3:  # 右键:缩小
8        g_size *= 2
9    draw_mandelbrot2(event.xdata, event.ydata, g_size)

最后,初始化画布并连接鼠标事件处理器。

Python

1fig, ax = plt.subplots()
2g_size = 2.5
3fig.canvas.mpl_connect('button_press_event', on_press)
4draw_mandelbrot2(0,0,g_size)
5plt.show()

运行与探索

运行上述代码,你将看到一个充满细节的广义曼德勃罗特集图像。通过鼠标左键和右键,你可以自由地放大和缩小,探索这个数学世界的奥秘。

结语

通过本篇技术博客,我们不仅实现了广义曼德勃罗特集的可视化,还引入了交互式放大缩小功能,为数学探索提供了生动的工具。这不仅是一次编程实践,也是对数学之美的直观体验。鼓励读者尝试修改指数值,探索不同幂次下的曼德勃罗特集形态,享受数学与编程带来的乐趣。

参考资料

相关文章
|
存储 数据采集 分布式计算
大规模数据处理:解锁现代技术与商业的无限潜能
在当今信息爆炸的时代,大规模数据处理成为了推动技术和商业创新的关键。本文将探讨大规模数据处理的意义和应用,并介绍其对现代社会带来的深远影响。
175 1
|
安全 Java 容器
Java多线程编程中的线程安全集合:保护数据的铁壁
Java多线程编程中的线程安全集合:保护数据的铁壁
407 1
|
Linux Docker 容器
|
10月前
|
人工智能 运维 定位技术
【微笑讲堂】AI时代的Geo优化:掌握这些技能,让你的内容被智能引擎“偏爱”
大家好,我是微笑老师!本期讲解“Geo都需要掌握哪些技能”。随着AI搜索兴起,GEO(生成式引擎优化)正取代传统SEO,核心在于让内容被AI“读懂、信任、引用”。需掌握四大技能:结构化数据工程、多模态语义对齐、动态知识图谱运维、权威信源建设。从“被找到”到“被引用”,GEO与SEO融合进化,助力内容在AI时代脱颖而出。未来已来,你准备好了吗?
1310 8
|
10月前
|
人工智能 Python
这个开源、免费的国产Agent封神了!一句话搞定复杂任务
曾火爆全网的Manus因收费、限区退出中国,而今国产替代AiPy横空出世!开源免费、本地运行,无需复杂提示词,一句指令即可自动拆解任务、写代码、执行并纠错。L5级智能体,真正实现全自动工作流,效率跃升新境界。
|
设计模式 Kubernetes Go
​​什么是Golang项目的“主包精简,逻辑外置”?​
“主包精简,逻辑外置”是Go语言项目的一种设计原则,强调将程序入口保持简单,核心逻辑拆分至其他包,以提升代码可维护性、可测试性及扩展性,适用于CLI工具、Web服务等场景。
328 7
|
人工智能 自然语言处理 vr&ar
通义首个音频生成模型 ThinkSound 开源,你的专业音效师
通义实验室推出首个音频生成模型ThinkSound,突破传统视频到音频生成技术局限,首次将思维链(CoT)应用于音频生成领域,实现高保真、强同步的空间音频生成。基于自研AudioCoT数据集,结合多模态大语言模型与统一音频生成模型,支持交互式编辑,显著提升音画匹配度与时序一致性。代码已开源,助力游戏、VR、AR等场景创新应用。
2706 4
|
人工智能 程序员 开发工具
女朋友说“好累”,我连夜做了一个 APP
简介:本文分享了作者如何通过一句话,利用“通义灵码”快速开发出一个实用的打卡提醒工具,全程几乎无需手动操作,展示了智能开发工具在简化编程、实现创意落地方面的强大能力。
405 0
|
存储 人工智能 JavaScript
构建企业AI的信任与信心基石:从认知到实践的全面升级
本文探讨企业在人工智能(AI)广泛应用背景下面临的信任与信心挑战,提出通过数据安全、技术透明度及技能认证构建信任体系。重点介绍生成式人工智能认证(GAI),其能助力企业培养AI人才,提升团队专业能力。文章还建议企业加强内部培训、外部合作与实战应用评估,全方位推动AI战略落地,为企业发展提供支持。