【问题标题】:Transform 3D coordinates to index of a space-filling curve (Peano, Hilbert...)将 3D 坐标转换为空间填充曲线的索引(Peano、Hilbert...)
【发布时间】:2018-07-23 15:32:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您的问题可以在这里,并且您确实得到了答案,所以一切都很好,但仍然要考虑,您是想在这里还是在更多数字和数学计算站点scicomp.stackexchange.com Stack Overflow通常更多用于编码问题,而用于数学方法问题。这可能是为什么已经投票结束您在此处提出的问题的原因。请注意,尽管您标记了问题fortran,但它根本与 Fortran 无关。
  • 要点,我删除了fortran标签。我最初添加它是因为实现应该在 fortran 中,但我看到这个问题更笼统。

标签: 3d hilbert-curve space-filling-curve


【解决方案1】:

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

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

我在 2015 年写了一篇博文:Understanding the Hilbert curve,其中包含希尔伯特索引的示例 Python 代码和希尔伯特“子立方体”旋转的图示。作为我编写的基于粒子的分子动力学模拟代码的一部分,我在 Fortran 中实现了紧凑的希尔伯特指数,请参阅 here

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

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 1970-01-01
    • 2011-09-02
    • 2016-11-22
    • 2019-07-18
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多