域着色 (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)) 的角度,表示函数值的"方向"
域着色的着色原理
域着色最常用的方案是 相位-模着色法:
- 相位着色:将 f(z) 的辐角 arg(f(z)) 映射到色相环(Hue Wheel)。辐角从 -π 到 +π 对应色相从红色经绿色、蓝色回到红色,形成一个完整的彩虹环。这样,相同辐角的点具有相同的色相。
- 模着色:将 f(z) 的模 |f(z)| 映射为亮度变化。通过条纹化的方式,模的等值线呈现为同心环状图案,帮助识别函数的增长和衰减。
通过等值线(Level Curve)参数的精细调节,你可以控制相位条纹和模条纹的密度、锐度和混合方式,从而获得从柔和渐变到锐利等高线的各种视觉效果。
域着色中的关键特征
在域着色图像中,你可以直观地识别以下复分析中的重要特征:
| 特征 | 视觉表现 | 数学含义 |
|---|---|---|
| 零点 | 所有颜色汇聚于一点,色相环完整绕行 | f(z₀) = 0,辐角绕零点旋转 |
| 极点 | 颜色反向汇聚,色相环反向绕行 | f(z₀) → ∞,模趋向无穷 |
| 支点 | 颜色不连续跳变 | 多值函数的分支切割处 |
| 鞍点 | 颜色呈十字交叉状 | 函数的临界点 |
小知识:零点处色相环绕行的圈数等于零点的阶数。例如,f(z) = z³ 在 z = 0 处有三阶零点,色相环会绕行三圈——这在域着色图像中表现为颜色变化加速三倍。
历史背景
域着色的概念可以追溯到 20 世纪 80 年代末。数学家 Frank Farris 在 1997 年的论文中系统性地推广了这一方法,将其作为复分析教学的可视化工具。在此之前,复变函数的可视化主要依赖于等高线图和剖面图,无法展示函数的全貌。
随着计算机图形学的发展,域着色从教学工具逐渐演变为数学艺术创作的媒介。通过选择不同的复变函数、调节等值线参数和调色板,可以创造出令人惊叹的视觉图案——从优雅的极点结构到复杂的分形边界,每一幅域着色图像都蕴含着深刻的数学结构。
界面概览
所有控制项位于右侧的属性面板中,分为五个主要部分:
- Geometry(几何):输入复变函数公式、调整视口、配置迭代系统
- Settings(设置):切换 GPU/CPU 渲染模式
- Formulas(公式):显示数学公式和标注
- Appearance(外观):调整背景颜色、等值线参数和渐变调色板
- 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 | 像素坐标 z | Mandelbrot 集风格 | w₀ = z, w_{k+1} = w_k² + c |
| ZERO | 0 | Julia 集风格 | w₀ = 0, w_{k+1} = w_k² + z |
| CONSTANT_C | 常量 c | Newton 分形风格 | 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) + c | Newton 法求 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(外观设置)


背景颜色
- 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 | 停止渐变动画 | 无 |
参数振荡动画
参数振荡动画让参数在指定范围内做周期性正弦振荡,是域着色最强大的动画功能。
工作原理
- 为每个参数指定振荡的步长(step)、范围(min, max)和边沿缓动(edge easing)
- 参数值在 [min, max] 范围内做正弦振荡:
value = mid + amp × sin(phase) - 振荡速度由步长和步长缩放因子共同控制
- 边沿缓动确保参数接近范围边界时减速,避免突变
可动画化的参数
| 参数 | 说明 | 默认动画范围 |
|---|---|---|
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 数组定义动画序列:
{
"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 法将复平面分为三个区域(对应三个根),每个区域用不同颜色表示。区域边界呈现分形结构——无论放大多少倍,边界都保持复杂的细节。
示例 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更多效果展示


技术细节
GPU 渲染管线
域着色使用单遍 GPU 渲染管线:
- 顶点着色器:执行 MVP 变换,传递 UV 坐标
- 片段着色器(核心渲染逻辑):
- UV → 复平面坐标映射(含宽高比校正和旋转)
- 公式求值(含迭代)
- 溢出保护(|f(z)|² > 10²⁴ 时标记为溢出)
- 计算模和辐角
- 生成相位条纹和模条纹(基于余弦函数)
- 调色板采样 + 等值线混合 + 偏置
动态着色器编译
域着色最精巧的技术实现是动态着色器编译:
- 公式解析:
ComplexExpressionParser将字符串公式(如z^3 - tan(t*z))解析为抽象语法树(AST) - GLSL 代码生成:AST 转换为 GLSL 表达式(如
c_sub(c_pow_int(z, 3), c_mul(c_tan(c_mul(t, z)), vec2(1.0, 0.0)))) - 着色器注入:在标准着色器源码中插入动态公式宏和参数声明
- 缓存机制:通过比较上次编译的 GLSL 代码避免重复编译
复数运算库
着色器内置完整的 GLSL 复数运算库,包含 25 个复数函数,Java 端和 GLSL 端完全对应,确保 CPU 和 GPU 路径的计算结果一致。
创作技巧
公式探索
- 从简单开始:先尝试
z^2、1/z、sin(z)等基本函数,理解域着色的视觉语言 - 组合函数:将基本函数组合,如
sin(z)/cos(z)=tan(z),观察零点和极点的关系 - 引入参数:在公式中加入参数 t,如
z^3 - tan(t*z),然后通过动画让参数变化 - 尝试迭代:启用迭代系统,使用
w^2 + c等迭代公式生成分形
视觉调优
等值线调节:
- 先选择
PHASE_MODULUS模式获得完整信息 - 调整相位密度和模密度让条纹疏密适中
- 调整锐度让条纹边界清晰但不刺眼
- 微调混合度和偏置获得最佳视觉效果
- 先选择
调色板选择:
- 彩虹色板:最经典的域着色配色,对应色相环
- 暖冷色板:突出零点(暖色)和极点(冷色)的对比
- 单色系色板:突出等值线结构,弱化色相信息
视口控制:
- 使用鼠标拖拽和滚轮快速定位感兴趣的区域
- 放大零点或极点附近可以观察到精细的分形结构
动画设计
参数振荡:
- 为公式中的参数 t 设置振荡动画,观察函数形态的连续变化
- 同时振荡 phaseDensity 和 modDensity,产生"呼吸"效果
- 使用边沿缓动避免参数在极值处的突变
域旋转:
- 配合参数振荡使用域旋转,产生旋转万花筒效果
- 旋转速度建议 0.05-0.2,过快会让人眩晕
渐变动画:
- 使用
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) - 域着色方法的推广论文
在线资源
- Wikipedia: Domain Coloring
- Wikipedia: Complex Analysis
- Complex Analysis - MIT OpenCourseWare - MIT 复分析公开课
相关软件
- Complex Explorer - 在线域着色工具
- Wolfram Alpha - 支持复变函数可视化
