将 3D 坐标转换为 space 填充曲线的索引(Peano、Hilbert...)

Transform 3D coordinates to index of a space-filling curve (Peano, Hilbert...)

虽然将 3D 坐标转换为 z 顺序曲线相对简单 (),但我很难理解使用不同 space 填充曲线的数学运算,例如 Peano 或 Hilbert。 任何关于实际代码如何进行转换的提示都将不胜感激。目标是有一个子程序,该子程序将 xyz 坐标作为输入,并进行任何必要的归一化和 returns space-填充曲线的索引。

子程序(x, y, z, space_filling_index)

与此相关:我读到有很多方法可以在 3D 中定义希尔伯特曲线 space,就局部性而言,哪种方法最好?如果对此有明确的答案...

该应用程序将对笛卡尔计算网格中的单元格进行重新排序,目的是在单元格访问其相邻单元格时增加缓存命中率。

希尔伯特曲线的工作原理是在每一步都使用相同的基本形状递归地划分一个立方体(对于 3D),通过旋转曲线使子立方体的出口点与下一个立方体的入口点匹配。

C. Hamilton 的技术报告 Compact Hilbert Indices 是一个很棒的资源。报告还介绍了非三次系统的紧凑型希尔伯特指数。

当我全神贯注于此时,我在 2015 年写了一篇博客 post:Understanding the Hilbert curve with sample Python code for the Hilbert index and an illustration of the rotation of Hilbert "sub-cubes". As part of a particle-based Molecular Dynamics simulation code I wrote, I implemented the compact Hilbert index in Fortran, see here

详细重新讨论细节是 "beyond the scope" 我相信是一个 SO 答案,但上面的资源应该对你有很大帮助。