如何在d维球中循环网格

时间:2017-06-22 08:13:02

标签: arrays

我在d维空间中有一个网格(节点之间的距离等于1)。现在我想循环遍历半径为r的d维球(原点中心)内的所有网格点。当然,我可以使用边长2r遍历d维盒子中的所有网格点,并检查它们是否位于球中。但是,特别是对于大d,这将浪费资源(盒子中的大多数网格点不在球内)。

1 个答案:

答案 0 :(得分:0)

通过减小剩余超平面中的大小,您可以在所有d维度中略微改进超立方体[-r,r]中的搜索。基本原理是,当您处于特定坐标时,剩余超平面的剩余半径定义为:

new_radius = sqrt(old_radius^2 - current_coordinate^2)

您可以在伪代码中使用递归算法

define function loop(dim, radius)    # will return a list of lists
    let l be the empty list
    loop for coord=0; coord<radius; coord = coord + 1
        newr = sqrt(old_radius^2 - coord^2)
        if dim is 1
            then append singleton list [coord] to l
        else
            for any list l1 in loop(dim-1, nr)
                append [coord] + l1 to l
        return l

这个算法只处理正坐标,但是当x不为空时,除了x之外,还可以通过处理-x来轻松扩展处理负坐标。