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

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

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

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

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

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

最佳答案

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

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

当我认真思考这个问题时,我在 2015 年写了一篇博文:Understanding the Hilbert curve包含希尔伯特索引的示例 Python 代码以及希尔伯特“子立方体”旋转的说明。作为我编写的基于粒子的分子动力学模拟代码的一部分,我在 Fortran 中实现了紧凑的希尔伯特索引,请参阅 here .

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

关于3d - 将 3D 坐标转换为空间填充曲线的索引(Peano、Hilbert...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48763826/

相关文章:

c++ - opengl 使用 glm 单独旋转一个对象

java - 这个光线转换算法正确吗?这是测试线/射线和立方体相交的正确方法吗?

c++ - 在 Irrlicht 中移动和旋转 SceneNode(Sphere)

algorithm - 在一组四叉树中找到最佳深度/范围以优化边界框中点的检索

algorithm - "Absolute"字符串公制

r - 线条下方的3D填充

java - java中的3D运动图

java - 如何在 JFrame 中实现希尔伯特曲线

algorithm - 使用海龟图形生成 3D 空间填充希尔伯特曲线

algorithm - 什么是快速n维Z阶曲线算法?