Algorithm 立方体上的等距点

Algorithm 立方体上的等距点,algorithm,matlab,math,3d,expectation-maximization,Algorithm,Matlab,Math,3d,Expectation Maximization,我需要初始化一些三维点,我希望它们在整个立方体中的间距相等。有什么创造性的方法可以做到这一点吗 我正在使用一个迭代期望最大化算法,我希望我的初始向量均匀地“跨越”空间 例如,假设我有八个点,我想在一个大小为1x1x1的立方体中等距分布。我想要一个边长为0.333的立方体的角上的点,在较大的立方体内居中 下面是一个2D示例。请注意,红色点彼此和边之间的距离相等。我想要同样的3D 在点数没有整数立方根的情况下,我可以在排列中留下一些“间隙” 目前,我正在获取点数量的立方根,并使用它来计算点的数量以

我需要初始化一些三维点,我希望它们在整个立方体中的间距相等。有什么创造性的方法可以做到这一点吗

我正在使用一个迭代期望最大化算法,我希望我的初始向量均匀地“跨越”空间

例如,假设我有八个点,我想在一个大小为1x1x1的立方体中等距分布。我想要一个边长为0.333的立方体的角上的点,在较大的立方体内居中


下面是一个2D示例。请注意,红色点彼此和边之间的距离相等。我想要同样的3D

在点数没有整数立方根的情况下,我可以在排列中留下一些“间隙”

目前,我正在获取点数量的立方根,并使用它来计算点的数量以及它们之间所需的距离。然后我遍历这些点并增加X、Y和Z坐标(交错排列,以便Y在X循环回0之前不会增加,Z对于Y也是如此)


如果在MATLAB中有一种简单的方法可以做到这一点,我很乐意使用它。

一个好的随机生成器可能是一个可用的第一近似值。可能需要稍后的过滤器(再次随机)重新定位最差的违规者。

这看起来与此相关。

您建议的采样策略称为Sukharev网格,这是最佳的低分散采样策略。在样本数量不是n^3的情况下,从采样的角度来看,选择网格中要忽略的点并不重要

在实践中,可以使用低差异(准随机)抽样技术在三维中获得非常好的结果。您可能想看看如何使用Halton和Hammersley序列


    • 对于点数不是完美立方体的情况,您必须更详细地定义问题。但是,对于点数为立方体的情况,可以使用:

      l=linspace(0,1,n+2);
      x=l(2:n+1); y=x; z=x;
      [X, Y, Z] = meshgrid(x, y, z);
      
      然后,对于矩阵中的每个位置,该点的坐标由X、Y和Z的相应元素给出。如果您希望在单个矩阵中列出点,使每行代表一个点,并且X、Y和Z坐标有三列,那么您可以说:

      points(:,1) = reshape(X, [], 1);
      points(:,2) = reshape(Y, [], 1);
      points(:,3) = reshape(Z, [], 1);
      

      现在,您在整个单位立方体的网格上有一个
      n^3
      点列表,不包括边界。正如其他人所建议的,如果你想要更少的分数,你可能会随机删除一些分数。通过使用
      randi([0 n^3],a,1)
      生成要删除的点的
      a
      索引,这将很容易做到。(不要忘记检查randi()返回的矩阵中是否存在重复项,否则可能无法删除足够多的点。)

      在立方体中随机选择点,然后计算到最近邻居或墙的向量。然后,通过指数衰减步长扩展最小向量的端点。如果迭代地这样做,这些点应该收敛到最优解。如果点的数量不是立方的,这甚至可以起作用。

      您没有完全定义问题,例如,在3D立方体中有许多可能的2点布局。3D通常很难在文本中解释。你能给我们一个草图吗?为什么你的8分是1/3的立方体?为什么不是1/2立方体或9/10立方体?我希望所有点彼此之间以及与包含立方体的侧面之间的距离相等。“彼此之间以及与包含立方体的侧面之间的距离相等”?我不确定总有一个解决方案满足这些条件。您如何定义好的RNG?毕竟,如果它是随机的,它不应该产生这个问题的近似值。我需要一个确定性算法。我以前做过这件事,但现在我需要一个确定性的解决方案。这个答案很有趣,可能是我正在寻找的,但目前我无法理解。