Arrays 如何在三维球中通过网格进行循环

Arrays 如何在三维球中通过网格进行循环,arrays,Arrays,我在d维空间中有一个网格(节点之间的距离等于1)。现在我想循环遍历位于半径为r的d维球(圆心在原点)内的所有网格点。当然,我可以在边长为2r的d维框中遍历所有网格点,并检查它们是否位于球中。但是,特别是对于大型d,这将是一种资源浪费(框中的大多数网格点不在球内) 通过减小剩余超平面中的大小,您可以稍微改进超立方体[-r,r]中所有d维的搜索。基本原理是,当您在特定坐标处时,剩余超平面的剩余半径由以下定义: new_radius = sqrt(old_radius^2 - current_coor

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

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

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
define function loop(dim,radius)#将返回一个列表列表
让我成为空名单

坐标循环=0;coord通过减小剩余超平面中的大小,您可以稍微改进超立方体[-r,r]中所有d维的搜索。基本原理是,当您在特定坐标处时,剩余超平面的剩余半径由以下定义:

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
define function loop(dim,radius)#将返回一个列表列表
让我成为空名单

坐标循环=0;coordThis更多的是PnC。假设在d维中有xd平面(x1、x2、x3…xd)。比如说,一个点的坐标将由(x1,x2,x3…xd)表示。对于你的情况,离原点的距离(dfo)=sqrt(和(x1^2+x2^2+x3^2+xd^2)),我喜欢这个想法。如果你提出一个答案,我会接受的。(什么是PnC?)这更多的是PnC。假设在d维中有xd平面(x1、x2、x3…xd)。比如说,一个点的坐标将由(x1,x2,x3…xd)表示。对于你的情况,离原点的距离(dfo)=sqrt(和(x1^2+x2^2+x3^2+xd^2)),我喜欢这个想法。如果你提出一个答案,我会接受的。(什么是PnC?)我们是否完全确定上述答案是正确的?在我的实现中,当维度大于3时,它会失败。我们完全确定上面的答案是正确的吗?在我的实现中,当维度大于3时,它会失败。