FractalPark
燃烧船入门

燃烧船

一种二次逃逸时间分形:平方前先折叠实部和虚部,色带便显出不对称的船形轮廓。

在探索器中打开
FractalPark 渲染的燃烧船标准视图:主船体剪影与火焰色逃逸带
FractalPark 渲染的燃烧船:楔形船体上方是火焰状山脊,外围为分层的逃逸时间着色。

概览

燃烧船离曼德布罗特集很近,只改了一步:每次平方前,z 的实部和虚部分别取绝对值。轨道折回坐标轴,二次映射的旋转对称性也随之断开。它不再是解析函数(不满足柯西–黎曼方程),边界便长出锐利折角。

按常用显示方向看——实轴水平、虚轴上下颠倒——折叠像一艘燃烧的船:楔形船体上冒出火焰状山脊。沿实轴往左,越来越小的副本排开,每一艘都带着同样的锯齿轮廓。

它虽是非解析映射,常用逃逸半径检测仍有效:|z| 超过 2 后必然发散。不过轨道已不按复解析函数的规律行进。标示逃逸快慢的色带不再平滑向外铺开,而是叠成硬边条带和嵌套矩形。

数学原理

绝对值二次迭代

z(n+1) = (absolute real z(n) + i times absolute imaginary z(n))^2 + c

先将实部和虚部分别取绝对值(反射到非负),组合成复数后再平方。展开之后,实部为 xₙ₊₁ = xₙ² − yₙ² + Re(c),虚部为 yₙ₊₁ = 2|xₙ||yₙ| + Im(c)。每一步,绝对值都把轨道折回坐标轴:xₙ 或 yₙ 若为负,先镜像为正再参与平方。燃烧船和曼德布罗特集的根本不同就在这个折叠——锐利矩形边界取代了光滑轮廓。

试试 c = −1。对曼德布罗特集,轨道 z₀=0, z₁=−1, z₂=0, z₃=−1, … 保持有界(周期 2)。对燃烧船,z₁ = (|0| + i|0|)² − 1 = −1,z₂ = (|−1| + i|0|)² − 1 = 0,轨道同样进入二周期。再看 c = i 这样的点:折叠会改变轨道的方向,产生与曼德布罗特不同的逃逸判断。

历史

1992 年,Michael Michelitsch 与 Otto E. Rössler 在《Computers & Graphics》论文中首次描述并渲染燃烧船分形。两人当时均在德国图宾根大学(Eberhard Karls Universität Tübingen)工作。论文展示了迭代过程,并将绝对值折叠产生的集合称为"准 Julia 集"——外形类似经典 Julia 集,却来源于非解析映射。

"燃烧船"这一名称来自靠近实轴区域的局部放大:深色船体上方升起火焰状山脊。1993 年 10 月,Paul Bourke 独立实现了该分形,并在页面中注明引用 Michelitsch 与 Rössler。Bourke 的网页成为该分形最早的在线参考资料之一。

由于公式是曼德布罗特递推的非解析修改,它不落在 Fatou 与 Julia 建立的经典复动力系统理论框架内。此后它成为非解析逃逸时间分形中探索得最广的一种。Buffalo、Airship、Celtic 和 Perpendicular 等变体则重新排列了折叠的位置与顺序。

视觉特征

深色船体上立着火焰状桅杆和烟囱,周围围着折叠出的层状色带。放在曼德布罗特集旁边看,不对称一眼可见。

再创作与示例

从 canonical Document 开始

打开本指南使用的同一份已审定公式状态,再在交互式探索器中调整视图、着色、变换或动画。

常见问题

它与曼德布罗特集有什么区别?

逐分量取绝对值打破了曼德布罗特集的旋转对称性,也让映射不再解析。光滑圆润的边界变成锐利折角和嵌套矩形。逃逸时间颜色层也随之成带,不再是平滑的辐射渐变。

为什么船体有时看起来是倒置的?

标准公式产生的图像实际上是上下颠倒的,因为绝对值在平方前将负的虚坐标翻转为正。包括 FractalPark 在内的大多数渲染器显示时会做垂直翻转。若屏幕 Y 轴朝下,可能再翻一次;具体方向取决于渲染器内部是否做了反射处理。

参考资料

源码导读

  1. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:init/0

    在 burningShip,此节点执行 if ismand: z = 0; 否则 z = pixel。

  2. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:loop/0

    在 burningShip,此节点执行 a = abs(z)。

  3. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:loop/1

    在 burningShip,此节点执行:若 power == 2,real(z) = real(a) * real(a) - imag(a) * imag(a),imag(z) = 2 * real(a) * imag(a),随后 z = z + c;否则 z = a ^ power + c。

  4. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:bailout

    在 burningShip,此节点执行 |z| <= 256。

语法特征

state-flow

状态流具体为:ismand 的选择先为 z 赋初值, abs(z) 赋给 a, 随后 power 分支重建 z。

stopping-test

停止测试只判断 |z| <= 256,不会给状态变量赋值。

参数实验

power

步骤

  1. 先按固定配置 运行 burningShip 并记录结果。
  2. 只改变 power,其余 运行时槽位和配置项保持固定后再次运行,并记录是否有差异。

观察要点

记录 a = abs(z); 当 power == 2 时,基于 real(a) 和 imag(a) 重建 z,再令 z = z + c, 否则 z = a ^ power + c 相比基线是否改变可见结果或 |z| <= 256 的停止判断;源定义不保证差异。

练习

追踪 burningShip 的标注,并说明 a = abs(z); 当 power == 2 时,基于 real(a) 和 imag(a) 重建 z,再令 z = z + c, 否则 z = a ^ power + c 在每个相关操作中如何执行。

完成检查

答案准确解释全部 4 个标注,指出 a = abs(z); 当 power == 2 时,基于 real(a) 和 imag(a) 重建 z,再令 z = z + c, 否则 z = a ^ power + c,并将 |z| <= 256 识别为停止测试而非状态赋值。

提示

状态流按顺序执行 若 ismand: z = 0; 否则 z = pixel → a = abs(z) → 若 power == 2: 基于 a 的分量重建 z 并加上 c; 否则 z = a ^ power + c,其结果供下一步使用。

来源与权利

来源:固定的运行时定义与发布决定。

权利信息见英文事实单元的固定决定。

公式档案

burningShip

该 FractalPark 规范实现已发布并可运行。

burningShip 的确定性预览

规范源码

语言
frm-like/1
标准库
1
Profile 模式
parameter-plane
Profile 中心
-0.5, 0
Profile 缩放
0.4
Profile 迭代次数
96
Profile 证据等级
mechanical

参数

  • power: real

规范源码

这是经过验证的只读规范版本。Remix 会创建一份独立的可编辑分支。

正在加载规范源码…

来源与当前实现

公式 ID
2ab193f5-4919-5e5c-a9fb-c1a0e3f5eb02
规范名称
burningShip
原始名称
burningShip
历史来源
FractalPark
当前实现
项目自有

这是 FractalPark 项目自有实现。所链接文件是固定版本的规范 Definition。

对权利或署名有异议?

请附上公式 ID 和支持证据。维护者可在复核期间暂缓或撤下该实现。 contact@fractalpark.com