我在d维空间中有一个网格(节点之间的距离等于1)。现在我想循环遍历半径为r的d维球(原点中心)内的所有网格点。当然,我可以使用边长2r遍历d维盒子中的所有网格点,并检查它们是否位于球中。但是,特别是对于大d,这将浪费资源(盒子中的大多数网格点不在球内)。
答案 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来轻松扩展处理负坐标。