Skip to content

域着色 (Domain Coloring)

简介

域着色示例

域着色(Domain Coloring)是一种将复变函数可视化的经典方法——它为复平面上的每一个点着色,让我们能够"看见"复数世界中函数的全貌。从黎曼的共形映射理论到现代的分形探索,域着色将抽象的复分析转化为直观的视觉体验,使得零点、极点、支点等复分析核心概念变得一目了然。

核心能力:

  • 自由公式输入:支持 25 种复数函数,可输入任意复变函数表达式,实时编译为 GPU 着色器
  • 迭代分形系统:内置三种种子模式(Mandelbrot 风格、Julia 风格、Newton 风格),支持自定义迭代公式
  • 等值线可视化:四种等值线模式(相位、模、相位+模、无),精细控制条纹密度与锐度
  • 调色板系统:支持手动、余弦和曲线三种渐变模式,配合 JSON 调色板实现丰富的色彩表达
  • 完整动画支持:参数振荡动画、域旋转动画、渐变动画,支持边缘缓动实现平滑过渡
  • GPU/CPU 双路径渲染:GPU 优先,失败自动降级 CPU,确保兼容性

数学背景

什么是域着色?

复变函数 f(z) 将一个复数 z 映射为另一个复数 w = f(z)。与实值函数不同,复变函数的图像无法直接在二维平面上绘制——因为输入和输出都是二维的。域着色通过在复平面上为每个点 z 着色来解决这个问题:颜色编码了 f(z) 的信息。

具体来说,域着色利用了复数的两个基本属性:

  • 模(Modulus):|f(z)| 的大小,表示函数值的"距离"
  • 辐角(Argument):arg(f(z)) 的角度,表示函数值的"方向"

域着色的着色原理

域着色最常用的方案是 相位-模着色法

  1. 相位着色:将 f(z) 的辐角 arg(f(z)) 映射到色相环(Hue Wheel)。辐角从 -π 到 +π 对应色相从红色经绿色、蓝色回到红色,形成一个完整的彩虹环。这样,相同辐角的点具有相同的色相。
  2. 模着色:将 f(z) 的模 |f(z)| 映射为亮度变化。通过条纹化的方式,模的等值线呈现为同心环状图案,帮助识别函数的增长和衰减。

通过等值线(Level Curve)参数的精细调节,你可以控制相位条纹和模条纹的密度、锐度和混合方式,从而获得从柔和渐变到锐利等高线的各种视觉效果。

域着色中的关键特征

在域着色图像中,你可以直观地识别以下复分析中的重要特征:

特征视觉表现数学含义
零点所有颜色汇聚于一点,色相环完整绕行f(z₀) = 0,辐角绕零点旋转
极点颜色反向汇聚,色相环反向绕行f(z₀) → ∞,模趋向无穷
支点颜色不连续跳变多值函数的分支切割处
鞍点颜色呈十字交叉状函数的临界点

小知识:零点处色相环绕行的圈数等于零点的阶数。例如,f(z) = z³ 在 z = 0 处有三阶零点,色相环会绕行三圈——这在域着色图像中表现为颜色变化加速三倍。

历史背景

域着色的概念可以追溯到 20 世纪 80 年代末。数学家 Frank Farris 在 1997 年的论文中系统性地推广了这一方法,将其作为复分析教学的可视化工具。在此之前,复变函数的可视化主要依赖于等高线图和剖面图,无法展示函数的全貌。

随着计算机图形学的发展,域着色从教学工具逐渐演变为数学艺术创作的媒介。通过选择不同的复变函数、调节等值线参数和调色板,可以创造出令人惊叹的视觉图案——从优雅的极点结构到复杂的分形边界,每一幅域着色图像都蕴含着深刻的数学结构。


界面概览

所有控制项位于右侧的属性面板中,分为五个主要部分:

  1. Geometry(几何):输入复变函数公式、调整视口、配置迭代系统
  2. Settings(设置):切换 GPU/CPU 渲染模式
  3. Formulas(公式):显示数学公式和标注
  4. Appearance(外观):调整背景颜色、等值线参数和渐变调色板
  5. Parameters(参数):定义公式中使用的自定义常量

注意:域着色是纯 2D 场景,不显示 Camera(相机)面板。


配置指南

1. Geometry(几何设置)

几何设置

公式输入

公式输入是域着色的核心。你可以在此输入任意复变函数表达式,系统会实时将其编译为 GPU 着色器并渲染。

支持的变量:

变量含义说明
z像素复数坐标代表复平面上当前像素的位置
i虚数单位i² = -1
pi圆周率 π≈ 3.14159
e自然常数 e≈ 2.71828
c复数常量由公式参数 a + bi 定义
自定义参数t, a, b在 Parameters 面板中定义

支持的运算符:

运算符示例说明
+z + 1复数加法
-z - i复数减法
*z * i复数乘法(可省略:2z = 2*z
/1/z复数除法
^z^3复数幂运算

支持的函数(25 种):

类别函数说明
三角函数sin, cos, tan复数三角函数
反三角函数asin, acos, atan, acot, asec, acsc复数反三角函数
双曲函数sinh, cosh, tanh复数双曲函数
反双曲函数asinh, acosh, atanh, acoth, arsech复数反双曲函数
指数/对数exp, log, ln复数指数与对数
其他sqrt, abs, arg, conj, pow, re, im开方、绝对值、辐角、共轭、幂、实部、虚部

公式示例:

公式说明
z^3 - 1三次多项式,有三个零点
sin(z)/cos(z)正切函数 tan(z)
1/z倒数函数,z=0 处有极点
exp(1/z)本性奇点,z=0 处有丰富结构
z^(a+3i)复数幂,参数 a 控制幂次
sin(z-i)/sin(z+i)正弦函数的极点平移
sqrt(1-1/z^2+z^3)含开方的复合函数

提示:修改公式后需要点击"应用"按钮才会生效,因为公式变更需要重新编译着色器。

视口控制

视口控制决定了复平面的观察范围:

  • Center X / Center Y:视口中心在复平面上的坐标

    • 默认值:(0, 0)
    • 步长:0.05,精度 6 位小数
    • 提示:可以通过鼠标拖拽画布来平移视口
  • Scale:缩放比例

    • 默认值:2.5
    • 范围:0.000001 ~ 无上限
    • 值越小,观察范围越大(缩小);值越大,观察范围越小(放大)
    • 提示:可以通过鼠标滚轮来缩放视口

操作技巧:鼠标拖拽平移 + 滚轮缩放是最快的探索方式,比手动输入坐标更直观。

迭代系统

迭代系统是域着色的高级功能,它将单次函数求值扩展为多次迭代,从而可以生成分形图案。

迭代设置

启用迭代

勾选"启用迭代"开关后,系统会对每个像素执行多次迭代计算,而非仅计算一次 f(z)。

迭代步数
  • Steps:迭代步数,范围 1 - 64
  • 步数越多,分形细节越丰富,但计算量也越大
  • 建议从 8-15 步开始,逐步增加观察效果变化
种子模式

种子模式决定了迭代的初始值:

模式初始值典型用途示例
PIXEL_Z像素坐标 zMandelbrot 集风格w₀ = z, w_{k+1} = w_k² + c
ZERO0Julia 集风格w₀ = 0, w_{k+1} = w_k² + z
CONSTANT_C常量 cNewton 分形风格w₀ = c, w_{k+1} = (w_k³-1)/(3w_k²) + c

理解种子模式

  • PIXEL_Z 模式下,每个像素的迭代起点就是该像素在复平面上的坐标。这是最直观的模式,适合探索 Mandelbrot 集及其变体。
  • ZERO 模式下,所有像素都从 0 开始迭代,但 z 作为参数参与迭代公式。这适合生成 Julia 集图案。
  • CONSTANT_C 模式下,迭代起点是常量 c(由公式参数定义),适合 Newton 法求根等应用。
迭代公式

迭代公式使用 w 变量表示当前迭代值,z 表示像素坐标:

迭代公式说明
w^2 + c经典 Mandelbrot/Julia 迭代
(w^3-1)/(3*w^2) + cNewton 法求 z³=1 的根
sin(w)cos(w)/(1+w)三角迭代
sin(w + z^2)复合迭代
w恒等迭代(仅使用初始公式的结果)

注意:当迭代公式为 w 时,系统仅使用初始公式 f(z) 的结果作为迭代的输出,配合较高的迭代步数可以产生平滑的累积效果。


2. Settings(设置)

设置面板

域着色的设置面板非常简洁,仅提供渲染模式切换:

  • GPU 模式(默认):使用 OpenGL 着色器实时渲染,性能最佳
  • CPU 模式:使用 CPU 逐像素计算,作为 GPU 模式的降级方案

建议:始终使用 GPU 模式以获得最佳性能。仅在 GPU 渲染出现问题时切换到 CPU 模式。


3. Formulas(公式显示)

在场景中显示数学公式和方程标注。

主方程显示

  • Show Main Equation(显示主方程):开启/关闭主方程显示
    • 开启后,系统会根据当前公式自动在场景中显示 LaTeX 公式
  • 位置与样式
    • X / Y:公式在场景中的位置坐标
    • Scale:公式缩放比例
    • Color:公式文字颜色

自定义公式

可以添加多个自定义公式到场景中:

  • 点击 "Add Formula" 按钮添加新公式
  • 每个公式支持 LaTeX 内容、位置、缩放和颜色设置
  • 点击公式右上角的删除按钮移除

4. Appearance(外观设置)

外观设置1外观设置

背景颜色

  • Background Color:设置渲染背景颜色
    • 域着色通常使用深色背景(如 #05070D#000000)以突出函数的颜色信息

等值线(Level Curve)

等值线是域着色最核心的视觉控制参数,它决定了如何将函数的相位和模信息转化为可见的条纹图案。

曲线模式
模式说明适用场景
PHASE仅显示相位条纹突出函数的辐角变化,观察零点和极点的色相环
MODULUS仅显示模条纹突出函数的模变化,观察等模线
PHASE_MODULUS同时显示相位和模条纹最常用的模式,兼顾相位和模信息
NONE不显示等值线纯色相映射,适合欣赏整体色彩

推荐:初学者建议使用 PHASE_MODULUS 模式,它提供了最丰富的信息。当你想专注于观察零点/极点的色相结构时,切换到 PHASE 模式。

相位密度(Phase Density)
  • 范围:0.01 ~ 无上限
  • 默认值:12.0
  • 步长:0.5
  • 作用:控制相位条纹的密度。值越大,条纹越密集,颜色变化越频繁
  • 建议
    • 低值(3-5):宽条纹,适合观察大范围色相变化
    • 中值(8-15):标准密度,兼顾细节与可读性
    • 高值(30+):细密条纹,产生类似等高线的效果
模密度(Mod Density)
  • 范围:0.01 ~ 无上限
  • 默认值:8.0
  • 步长:0.5
  • 作用:控制模条纹的密度。值越大,同心环状条纹越密集
  • 建议
    • 低值(5-8):宽环,适合观察模的整体变化趋势
    • 中值(10-18):标准密度
    • 高值(50+):细密环纹,精细展示模的变化
相位锐度(Phase Sharpness)
  • 范围:0.01 ~ 无上限
  • 默认值:1.0
  • 步长:0.1
  • 作用:控制相位条纹的锐利程度。值越大,条纹边界越清晰;值越小,条纹越柔和
  • 建议
    • 0.1-0.4:柔和渐变,色彩过渡平滑
    • 0.5-1.0:标准锐度
    • 1.0+:锐利条纹,等值线清晰可辨
模锐度(Mod Sharpness)
  • 范围:0.01 ~ 无上限
  • 默认值:1.0
  • 步长:0.1
  • 作用:控制模条纹的锐利程度,效果与相位锐度类似
曲线偏置(Curve Bias)
  • 范围:-1.0 ~ 1.0
  • 默认值:0.15
  • 步长:0.05
  • 作用:调整等值线的整体亮度偏移。正值增亮,负值减暗
  • 建议:通常保持接近 0 的值即可;微调可改善特定函数的视觉效果
曲线混合度(Curve Mix)
  • 范围:0% ~ 100%(0.0 ~ 1.0)
  • 默认值:100%(1.0)
  • 作用:控制等值线与纯色相映射的混合比例
    • 0%:纯色相映射,无等值线效果
    • 100%:完全显示等值线
  • 建议:大多数情况下保持 90%-100%;降低混合度可获得更柔和的视觉效果

渐变调色板

域着色使用 1D LUT(查找表)纹理进行着色,支持三种渐变模式:

  • Manual(手动模式)

    • 手动添加、删除和调整颜色节点
    • 支持拖拽重排颜色顺序
    • 可选择随机策略(单色、类似色、互补色、分裂互补色)
  • Cosine(余弦模式)

    • 使用 IQ 余弦调色板公式:color(t) = a + b · cos(2π(c·t + d))
    • 分别控制 R/G/B 三个通道的偏移、振幅、频率和相位
    • 支持一键随机化和应用
  • Curve(曲线模式)

    • 通过可编辑的贝塞尔曲线分别控制 R/G/B 三个通道
    • 提供最灵活的颜色控制
    • 支持一键随机化和应用

调色板选择建议

  • 经典域着色使用彩虹色板(红→黄→绿→青→蓝→品红→红),对应色相环
  • 单色系调色板可以突出等值线结构
  • 对比色调色板可以强调零点和极点的位置

5. Parameters(参数)

定义公式中使用的自定义常量。当公式中包含参数(如 t, a, b 等)时,需要在此面板中定义它们的值。

  • 添加参数:在底部输入参数名和初始值,点击添加按钮
  • 修改参数:直接修改参数的数值
  • 删除参数:点击参数右侧的删除按钮

重要:公式中使用的参数必须先在 Parameters 面板中定义,否则公式验证会报错。参数值支持在动画中动态变化。


动画和时间线

域着色支持丰富的动画效果,可以通过时间线系统创建连续的动画序列。

动画类型

域着色支持两种时间线动画类型:

  • Wait(等待):保持当前状态一段时间
  • Animate(动画):执行一组动画动作

可用的动画方法

方法说明参数
domainRotate域旋转动画rotation_speed:旋转速度(浮点数,默认 0.2)
paramStart启动参数振荡动画参数配置(见下文)
paramStop停止参数振荡动画
gradientStart启动渐变动画渐变配置(见下文)
gradientStop停止渐变动画

参数振荡动画

参数振荡动画让参数在指定范围内做周期性正弦振荡,是域着色最强大的动画功能。

工作原理

  1. 为每个参数指定振荡的步长(step)、范围(min, max)和边沿缓动(edge easing)
  2. 参数值在 [min, max] 范围内做正弦振荡:value = mid + amp × sin(phase)
  3. 振荡速度由步长和步长缩放因子共同控制
  4. 边沿缓动确保参数接近范围边界时减速,避免突变

可动画化的参数

参数说明默认动画范围
scale视口缩放0.5 ~ 1.5
phaseDensity相位密度5.0 ~ 10.0
modDensity模密度5.0 ~ 10.0
phaseSharpness相位锐度0.001 ~ 2.0
modSharpness模锐度0.001 ~ 2.0
自定义参数t, a-100 ~ 100

边沿缓动

边沿缓动(Edge Easing)控制参数在振荡极值处的速度变化,避免硬性反弹:

  • window:缓动窗口大小(0-1),值越大缓动区间越宽
  • floor:缓动最低速度比例(0-1),0 表示完全停止
  • easing:缓动函数类型(如 SINE_OUT, QUAD_OUT 等)

域旋转动画

域旋转动画让整个复平面绕原点旋转,产生万花筒般的视觉效果:

  • 旋转速度为浮点数,正值顺时针旋转,负值逆时针旋转
  • 典型值:0.1(缓慢旋转)~ 0.5(快速旋转)

渐变动画

渐变动画让调色板循环偏移,产生色彩流动效果:

  • mode:渐变模式,如 HUE_ROTATE(色相旋转)
  • speed:动画速度
  • interpolation:颜色插值模式(RGB, LINEAR, OKLAB, OKLCH
  • affectInside / affectOutside:是否影响等值线内外区域

配置方法

通过 JSON 配置文件中的 timeline 数组定义动画序列:

json
{
  "timeline": [
    { "type": "wait", "duration": 1 },
    {
      "type": "animate", "duration": 15, "easing": "SINE_IN_OUT",
      "actions": [
        { "method": "domainRotate", "args": [0.1] },
        {
          "method": "paramStart",
          "args": [{
            "targetDomain": "SURFACE",
            "parameters": {
              "t": { "step": 0.005, "min": 0.6, "max": 1.7,
                     "edgeEasing": { "window": 0.35, "floor": 0.4, "easing": "QUAD_OUT" } },
              "phaseDensity": { "step": 0.005, "min": 5, "max": 14 },
              "modDensity": { "step": 0.005, "min": 2, "max": 7 }
            }
          }]
        }
      ]
    },
    { "type": "wait", "duration": 30 }
  ]
}

经典域着色示例

示例 1:三次多项式

最经典的域着色示例,展示三个零点的色相环结构。

公式:z^3 - 1
视口:中心 (0, 0),缩放 0.8
等值线:PHASE_MODULUS,相位密度 20,模密度 17

解读:三个零点分别位于 1, e^{2πi/3}, e^{4πi/3},在图像中表现为三个颜色汇聚点,每个点周围色相环完整绕行一圈。

示例 2:正弦函数的极点平移

展示正弦函数极点的对称平移效果。

公式:sin(z-i)/sin(z+i)
视口:中心 (0, 0),缩放 0.3
等值线:PHASE_MODULUS,相位密度 4,模密度 16

示例 3:参数化正弦函数

通过参数 t 控制正弦函数的偏移,适合制作动画。

公式:sin(z-1)/sin(z+t i)
参数:t = 0.95
视口:中心 (0, 0),缩放 0.6
等值线:PHASE_MODULUS,相位密度 4.5,模密度 13.5
动画:参数 t 在 [2, -2] 范围振荡

示例 4:复数幂

复数幂产生螺旋状的域着色图案,极具视觉冲击力。

公式:z^(a+3i)
参数:a = 1
视口:中心 (0, 0),缩放 2.6
等值线:PHASE_MODULUS,相位密度 4.5,模密度 13.5
动画:参数 a 在 [1, 3] 范围振荡

示例 5:Newton 分形

使用 Newton 迭代法求 z³ = 1 的根,生成经典的 Newton 分形图案。

公式:z(恒等映射)
迭代:启用,种子模式 CONSTANT_C,步数 8
迭代公式:(w^3-1)/(3*w^2) + c
视口:中心 (0, 0),缩放 0.5
等值线:PHASE_MODULUS,相位密度 13,模密度 7

Newton 分形

解读:Newton 法将复平面分为三个区域(对应三个根),每个区域用不同颜色表示。区域边界呈现分形结构——无论放大多少倍,边界都保持复杂的细节。

示例 6:三角迭代

使用三角函数迭代生成的分形图案。

公式:z(恒等映射)
迭代:启用,种子模式 PIXEL_Z,步数 45
迭代公式:sin(w)cos(w)/(1+w)
逃逸半径:64
视口:中心 (-0.5, 0),缩放 0.5
等值线:PHASE_MODULUS,相位密度 10,模密度 6

示例 7:ZERO 种子迭代

从零开始迭代,生成 Julia 集风格的图案。

公式:z(恒等映射)
迭代:启用,种子模式 ZERO,步数 27
迭代公式:sin(w + z^2)
逃逸半径:1024
视口:中心 (0, 0),缩放 1.2
等值线:PHASE_MODULUS,相位密度 9,模密度 5

示例 8:有理函数

有理函数的域着色展示了零点和极点的交织结构。

公式:((z^2 - 1)(z - 2 - i)^2) / (z^2 + 2 + 2i)
视口:中心 (0, 0),缩放 0.3
等值线:PHASE_MODULUS,相位密度 5,模密度 18

更多效果展示

域着色示例 1域着色示例 2


技术细节

GPU 渲染管线

域着色使用单遍 GPU 渲染管线:

  1. 顶点着色器:执行 MVP 变换,传递 UV 坐标
  2. 片段着色器(核心渲染逻辑):
    • UV → 复平面坐标映射(含宽高比校正和旋转)
    • 公式求值(含迭代)
    • 溢出保护(|f(z)|² > 10²⁴ 时标记为溢出)
    • 计算模和辐角
    • 生成相位条纹和模条纹(基于余弦函数)
    • 调色板采样 + 等值线混合 + 偏置

动态着色器编译

域着色最精巧的技术实现是动态着色器编译:

  1. 公式解析ComplexExpressionParser 将字符串公式(如 z^3 - tan(t*z))解析为抽象语法树(AST)
  2. GLSL 代码生成:AST 转换为 GLSL 表达式(如 c_sub(c_pow_int(z, 3), c_mul(c_tan(c_mul(t, z)), vec2(1.0, 0.0)))
  3. 着色器注入:在标准着色器源码中插入动态公式宏和参数声明
  4. 缓存机制:通过比较上次编译的 GLSL 代码避免重复编译

复数运算库

着色器内置完整的 GLSL 复数运算库,包含 25 个复数函数,Java 端和 GLSL 端完全对应,确保 CPU 和 GPU 路径的计算结果一致。


创作技巧

公式探索

  1. 从简单开始:先尝试 z^21/zsin(z) 等基本函数,理解域着色的视觉语言
  2. 组合函数:将基本函数组合,如 sin(z)/cos(z) = tan(z),观察零点和极点的关系
  3. 引入参数:在公式中加入参数 t,如 z^3 - tan(t*z),然后通过动画让参数变化
  4. 尝试迭代:启用迭代系统,使用 w^2 + c 等迭代公式生成分形

视觉调优

  1. 等值线调节

    • 先选择 PHASE_MODULUS 模式获得完整信息
    • 调整相位密度和模密度让条纹疏密适中
    • 调整锐度让条纹边界清晰但不刺眼
    • 微调混合度和偏置获得最佳视觉效果
  2. 调色板选择

    • 彩虹色板:最经典的域着色配色,对应色相环
    • 暖冷色板:突出零点(暖色)和极点(冷色)的对比
    • 单色系色板:突出等值线结构,弱化色相信息
  3. 视口控制

    • 使用鼠标拖拽和滚轮快速定位感兴趣的区域
    • 放大零点或极点附近可以观察到精细的分形结构

动画设计

  1. 参数振荡

    • 为公式中的参数 t 设置振荡动画,观察函数形态的连续变化
    • 同时振荡 phaseDensity 和 modDensity,产生"呼吸"效果
    • 使用边沿缓动避免参数在极值处的突变
  2. 域旋转

    • 配合参数振荡使用域旋转,产生旋转万花筒效果
    • 旋转速度建议 0.05-0.2,过快会让人眩晕
  3. 渐变动画

    • 使用 HUE_ROTATE 模式让调色板循环流动
    • OKLAB 插值模式比 RGB 模式产生更自然的色彩过渡

常见问题

画面全黑或全白

问题:渲染结果完全黑色或完全白色

原因:函数在某些区域值过大或过小,导致颜色信息被压缩

解决方案

  • 调整 Scale(缩放)改变观察范围
  • 调整等值线参数:增大 phaseDensity 和 modDensity
  • 检查公式是否在当前视口范围内有定义(如 1/z 在 z=0 处无定义)

公式编译失败

问题:输入公式后提示编译错误

原因:公式语法不正确或使用了不支持的函数

解决方案

  • 确保使用支持的函数名(区分大小写)
  • 确保所有使用的参数已在 Parameters 面板中定义
  • 检查括号是否匹配
  • 使用 * 表示乘法(2z 可以省略,但 z(z+1) 建议写成 z*(z+1)

迭代结果不理想

问题:启用迭代后图像效果不如预期

原因:迭代参数配置不当

解决方案

  • 尝试不同的种子模式(PIXEL_Z / ZERO / CONSTANT_C)
  • 调整迭代步数(从 8-15 步开始)
  • 检查迭代公式是否正确
  • 调整逃逸半径(默认 1,000,000,某些函数可能需要更小的值)

着色器编译卡顿

问题:修改公式后出现短暂卡顿

原因:公式变更需要重新编译 GPU 着色器

解决方案

  • 这是正常行为,编译通常在 0.5 秒内完成
  • 仅公式和迭代公式的变更需要重编译,其他参数的修改可以实时更新

进阶主题

理解复变函数的局部行为

域着色是理解复变函数局部行为的强大工具:

  • 零点:在零点附近,f(z) ≈ a·(z-z₀)ⁿ,色相环绕行 n 圈
  • 极点:在极点附近,f(z) ≈ a/(z-z₀)ⁿ,色相环反向绕行 n 圈
  • 本性奇点:在本性奇点附近(如 exp(1/z) 在 z=0),颜色变化极其剧烈,呈现"无限振荡"

Mandelbrot 集与 Julia 集的关系

通过域着色的迭代系统,你可以同时探索 Mandelbrot 集和 Julia 集:

  • Mandelbrot 集:使用 PIXEL_Z 种子模式,迭代公式 w^2 + c,其中 c 是常量。每个像素 z 作为初始值,c 作为参数
  • Julia 集:使用 ZERO 种子模式,迭代公式 w^2 + z,其中 z 是像素坐标。所有像素从 0 开始迭代,z 作为参数

两者的关系是:Mandelbrot 集中的每个点 c 对应一个 Julia 集。Mandelbrot 集内部的 c 产生连通的 Julia 集,外部的 c 产生不连通的 Julia 集(Fatou 尘)。

Newton 分形的数学原理

Newton 法求 f(z) = 0 的根时,迭代公式为:

对于 f(z) = z³ - 1,迭代公式为:

Newton 分形的迷人之处在于:虽然三个根是简单的点,但吸引域的边界却是无限复杂的分形——这是混沌与秩序共存的又一例证。


参考资源

数学理论

  • Tristan Needham - Visual Complex Analysis (1997) - 复分析可视化的经典教材
  • Elias Wegert - Visual Complex Functions: An Introduction with Phase Portraits (2012) - 域着色方法的系统论述
  • Frank Farris - "Visualizing complex-valued functions in the plane" (1997) - 域着色方法的推广论文

在线资源

相关软件

All rights reserved.