祈灵工具箱

🐚分形浏览器 - Mandelbrot、Julia 集、L 系统与巴恩斯利蕨

在浏览器里探索分形之美。逃逸时间分形包括 Mandelbrot 曼德博集、Julia 集、Burning Ship 燃烧船、Tricorn 三角集和 zⁿ − 1 的牛顿分形:用滚轮缩放、拖动平移、双指捏合,双击放大;画面在多个 Web Worker 中按条带并行计算(线程数取决于你的 CPU 核心数),先出低分辨率预览再逐步细化,交互时旧画面会先按新视图变换显示,所以拖动和缩放很跟手。最大迭代次数默认随缩放倍数自动增加,也可以手动设置;使用平滑(连续)着色,六套调色板,色带密度和偏移可调,换色无需重新计算。在 Mandelbrot 上悬停会在角落实时预览该点对应的 Julia 集,单击即可打开;Julia 模式下在小地图上拖动参数 c,图像实时变化。计算使用双精度浮点,大约放大到 10¹³ 倍后会出现块状失真,工具会提示。当前视图会写进网址,复制链接即可分享同一画面;可按 1280×720 到 3840×2160 等分辨率导出 PNG。另外两个标签页:L 系统(科赫雪花、谢尔宾斯基三角形、龙曲线、分形植物、希尔伯特曲线等,可自定义公理、规则和转角)与 IFS 迭代函数系统(巴恩斯利蕨、谢尔宾斯基地毯、枫叶等,用混沌游戏生成数十万个点并按密度着色)。

免费 · 无需注册 · 浏览器本地处理最后更新:

正在加载工具...

如何使用分形浏览器

  1. 1选择分形类型,用滚轮、拖动或双指在图上缩放和平移
  2. 2调整调色板、色带密度和迭代次数;在 Mandelbrot 上单击打开对应的 Julia 集
  3. 3复制分享链接或选择分辨率导出 PNG;也可以切换到 L 系统、IFS 标签页

常见问题

Mandelbrot 集合是怎么画出来的?
对平面上每个点 c,从 z = 0 开始反复计算 z ← z² + c。如果 |z| 始终不超过 2,这个点就属于 Mandelbrot 集合(画成黑色);否则记下 |z| 超过界限时迭代了多少次,用这个次数决定颜色。工具使用“平滑迭代次数” n + 1 − log₂(log|z|) 代替整数次数,所以颜色过渡连续、没有明显的色带台阶。
Mandelbrot 集和 Julia 集有什么关系?
两者用的是同一个迭代 z ← z² + c。Julia 集固定参数 c、让起点 z 遍历平面;Mandelbrot 集固定起点 z = 0、让 c 遍历平面。c 在 Mandelbrot 集内部时对应的 Julia 集是连通的一整块,c 在外面时 Julia 集碎成尘埃,c 靠近边界时最复杂好看。所以 Mandelbrot 集可以看作所有 Julia 集的“目录”,在它上面单击就能打开对应的 Julia 集。
为什么放大到一定程度画面会变成马赛克?
浏览器里的 JavaScript 数字是双精度浮点数,大约只有 15~16 位有效数字。放大到约 10¹³~10¹⁴ 倍时,相邻像素对应的坐标差已经小于浮点数能区分的最小间隔,很多像素会算出同一个值,画面就成块了。更深的缩放需要任意精度或微扰理论算法,计算量大得多;工具会在接近极限时给出提示。
L 系统和 IFS 是什么?
L 系统用字符串重写规则生成分形:比如科赫雪花从 F--F--F 开始,每一代把每个 F 替换成 F+F--F+F,再用“海龟绘图”把 F 解释为向前画线、+ 和 − 解释为转角。IFS(迭代函数系统)由几个仿射变换组成,混沌游戏每次随机选一个变换作用在当前点上,几十万次之后点的分布就是分形本身,巴恩斯利蕨只用四个变换就画出了逼真的蕨叶。