虽然将3D坐标转换为z次序曲线相对简单(Efficient z-order transformation in Fortran),但是我很难围绕数学使用不同的空间填充曲线,例如Peano或Hilbert。 关于如何进行转换的实际代码的任何提示都可能会受到赞赏。目标是有一个子程序,它将xyz坐标作为输入,无论需要什么样的归一化,都会返回空间填充曲线的索引。
子程序(x,y,z,space_filling_index)
与此相关:我读到有很多方法可以在3D空间中定义希尔伯特曲线,这在局部性方面最好?如果对此有明确的答案......
应用程序将是笛卡尔计算网格中单元格的重新排序,其目标是在单元格访问其邻居单元格时增加缓存命中。
答案 0 :(得分:3)
希尔伯特曲线通过在每一步使用相同的基本形状递归地划分立方体(用于3D),通过旋转曲线使得子立方体的出口点与下一个立方体的入口点匹配。
奇妙的资源是C. Hamilton的技术报告Compact Hilbert Indices。该报告还介绍了非立方系统的紧致希尔伯特指数。
当我绕过它时,我在2015年撰写了一篇博客文章:Understanding the Hilbert curve,其中包含希尔伯特指数的示例Python代码以及希尔伯特“子立方体”的旋转图示。作为我写的基于粒子的分子动力学模拟代码的一部分,我在Fortran中实现了紧凑的Hilbert索引,参见here。
详细重新讨论细节“超出了SO的答案的范围”我相信,但上面的资源应该对你有很大的帮助。