探索分形空间填充希尔伯特曲线,可调节阶数、颜色编码遍历顺序,并实时映射坐标
空间填充曲线是一种连续满射映射 f: [0,1] → [0,1]²。大卫·希尔伯特于1891年描述了他的曲线,作为一种填充整个正方形的几何构造。希尔伯特曲线递归定义:1阶时曲线以U形访问2×2网格。每升高一阶,前一网格的每个单元被旋转/镜像的U形副本替换,分辨率翻四倍。n阶时曲线恰好访问所有 2ⁿ × 2ⁿ = 4ⁿ 个单元。关键性质:(1) 连续性 — 曲线是无跳跃的连续路径。(2) 自相似性 — 每个象限是整体的旋转副本。(3) 局部性 — 1D线上相近的点在2D中也倾向于相近,适合空间索引。(4) 不可微性 — 极限曲线处处无切线。
希尔伯特曲线通过Lindenmayer式替换规则构建。1阶时,曲线按左下→左上→右上→右下的顺序追踪四个象限(U形)。从n阶到n+1阶,每个单元细分为四个子单元,每个象限中的子曲线旋转90°或镜像,使入口和出口正确连接。算法使用两个函数:xy2d(x, y, n) 将2D网格坐标转为曲线上的一维距离(0到4ⁿ−1),d2xy(d, n) 将一维距离转回2D坐标。两者均在O(n)时间内运行。下方图表是采样局部性散点图:它从不同曲线间距中抽样若干单元对,比较1D曲线距离|d₁−d₂|与实际2D欧几里得距离。点越集中在左下区域,说明局部性保持越强。
空间索引:数据库(Google S2几何库、PostgreSQL)使用希尔伯特曲线将2D/3D坐标映射为1D键,实现高效范围查询。图像处理:希尔伯特曲线扫描顺序将2D图像转为保持空间局部性的1D序列,改善压缩和缓存性能。数据可视化:将高维数据映射到希尔伯特曲线上可保留聚类结构——用于火焰图和基因组浏览器。数值计算:空间填充曲线用于并行计算中的区域划分,保证相邻性。计算机图形学:纹理映射和细节层次选择受益于曲线的局部性。地理空间:Uber的H3六边形网格内部使用希尔伯特曲线进行单元排序。数学:希尔伯特曲线是[0,1]和[0,1]²具有相同势的构造性证明(康托尔1877年的惊人结果)。
使用阶数滑块调节递归深度(1-7)。1阶时看到一个简单的U形访问4个单元;7阶时曲线访问16,384个单元。在曲线视图(彩色线条)、热力图(按遍历顺序着色的单元)或叠加模式间切换。颜色梯度从蓝色(起点,d=0)到红色(终点,d=4ⁿ−1)显示遍历顺序。输入x,y坐标后点击查找,高亮该单元并显示其在曲线上的位置d;也可以直接点击画布查找单元。使用播放按钮渐进式绘制曲线,观察U形模式如何复制和连接。底部图表显示采样后的局部性保持:二维中相近的单元通常对应较小的曲线距离,但这种关系并不是精确线性的。