1

虽然将 3D 坐标转换为 z 阶曲线相对简单(Fortran 中的高效 z 阶转换),但我很难围绕使用不同空间填充曲线的数学问题,例如 Peano 或 Hilbert。任何有关如何进行转换的实际代码的提示都将不胜感激。目标是有一个子程序,它将 xyz 坐标作为输入,并进行必要的标准化,并返回空间填充曲线的索引。

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

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

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

4

1 回答 1

4

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

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

我在 2015 年写了一篇博文:用希尔伯特指数的 Python 代码示例理解希尔伯特曲线,以及希尔伯特“子立方体”旋转的插图。作为我编写的基于粒子的分子动力学模拟代码的一部分,我在 Fortran 中实现了紧凑的希尔伯特指数,请参见此处

我相信,详细重新讨论细节“超出了 SO 答案的范围”,但上面的资源应该对您有很大帮助。

于 2018-02-13T09:57:51.387 回答