3d 将三维坐标转换为空间填充曲线的索引(Peano、Hilbert…)

3d 将三维坐标转换为空间填充曲线的索引(Peano、Hilbert…),3d,hilbert-curve,space-filling-curve,3d,Hilbert Curve,Space Filling Curve,虽然将3D坐标转换为z阶曲线相对简单(),但我很难用不同的空间填充曲线(例如Peano或Hilbert)来理解数学。 任何关于执行转换的实际代码的提示都将不胜感激。目标是创建一个子程序,该子程序将xyz坐标作为输入,使用任何必要的标准化,并返回空间填充曲线的索引 子例程(x、y、z、空间填充索引) 与此相关的是:我读到有很多方法可以定义三维空间中的希尔伯特曲线,哪种方法在局部性方面最好?如果对此有明确的答案 该应用程序将在笛卡尔计算网格中对单元进行重新排序,目的是在单元访问其相邻单元时增加缓存命

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

子例程(x、y、z、空间填充索引)

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


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

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

C.汉密尔顿的技术报告是一个极好的资源。报告还介绍了非三次系统的紧希尔伯特指数

我在2015年写了一篇博文,内容是:Hilbert索引的Python示例代码和Hilbert“子立方体”的旋转说明。作为我编写的基于粒子的分子动力学模拟代码的一部分,我在Fortran中实现了紧凑的Hilbert索引,请参阅


最后,详细讨论“答案超出了范围”,我相信上面的资源应该对你有很大帮助。

你的问题可以在这里,你确实得到了答案,所以一切都很好,但是仍然要考虑,不管你是想在这里问下一个问题,还是想在一个更数值化和数学化的计算站点上问下一个问题,堆栈溢出通常更多地是针对编码问题,而那个问题是针对数学方法问题。这可能就是为什么已经有人投票结束你的问题的原因。请注意,虽然您标记了这个问题,但它根本不是关于Fortran的。我最初添加它是因为实现应该使用fortran,但我发现问题更一般。