c语言希尔伯特曲线的算法分析,Hilbert曲线介绍以及代码实现

本文介绍了空间填充曲线中的希尔伯特曲线,它用于将多维空间转换为一维,保持了空间邻近性。文章详细阐述了希尔伯特曲线的特性,并通过代码展示了如何用C语言实现从二维坐标到希尔伯特曲线位置的转换,以及从曲线位置反解回坐标的过程。
摘要由CSDN通过智能技术生成

空间填充曲线是指,一维曲线去包含整个二维甚至多维空间的一种函数曲线。而根据不同的排列规则,可以得到不同的空间填充曲线。

如Z-order曲线, 如图1(也就是geohash采取的曲线),Peano曲线如图2,以及本文将介绍的Hilbert曲线如图3。

dc9f07c44381850049c705a4f692ef07.png

图1

19432e8209c42b2228c947814ed3e393.png

图2

1359f2fce3ff074627bb5e835fc4bf9a.png

图3

Hilbert曲线以及其离散近似表示方法都非常实用,因为其将多维空间转换为一维空间的方法很好地保留了空间邻近性。(x,y)是一个单元方格中的点,d代表该点在Hilbert曲线上的位置,而由于其空间的邻近性,在单元格上近似的点,其对应Hilbert的d值也比较接近。

正因为这种邻近性,空间填充曲线被广泛用于计算机科学,且在多维数据库索引中,经常用Hilbert曲线取代Z order曲线。接下来我们看如何用代码实现Hilbert算法。

现在假设我们以U字形来访问区域。在每个象限中,我们同样以U字形来访问子象限,但是要调整好U字形的朝向使得和相邻的象限衔接起来。如果我们正确地组织了这些U字形的朝向,我们就能完全消除不连续性,不管我们选择了什么分辨率,都能连续地访问整个区域。

0bc954f53afceded572dd2202b40a29b.png

图4

如图4,在第一层,枚举这些点很简单:选定一个方向和一个起始点,环绕四个象限,用0到3给他们编号。当我们要确定访问子象限的顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值