【问题标题】:Equidistant points across a cube立方体上的等距点
【发布时间】:2010-11-08 00:21:02
【问题描述】:

我需要初始化一些三维点,我希望它们在整个立方体中等距分布。有没有创造性的方法来做到这一点?

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

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

下面是一个 2D 示例。请注意,红点与彼此和边缘等距。我希望 3D 也一样。

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

目前我正在取点数的立方根,并使用它来计算点数和它们之间的所需距离。然后我遍历这些点并递增 X、Y 和 Z 坐标(交错以使 Y 在 X 循环回 0 之前不会递增,对于 Z 而言与 Y 相同)。

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

【问题讨论】:

  • 您没有完全定义问题,例如 3D 立方体中有很多可能的 2 点布局。
  • 3d 通常很难用文字解释。你能给我们一张草图吗?
  • 为什么你的 8 分会出现在 1/3 的立方体中?为什么不是 1/2 立方体或 9/10 立方体?
  • 我希望所有点彼此之间以及与包含立方体的侧面等距。
  • “彼此和包含立方体的侧面等距”?我不确定是否一定有总是满足这些条件的解决方案。

标签: algorithm matlab math 3d expectation-maximization


【解决方案1】:

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

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()返回的矩阵中的重复项,否则可能删除的点不够多。)

【讨论】:

    【解决方案2】:

    在立方体内随机选择点,然后计算到最近邻或墙的向量。然后,通过指数衰减步长扩展最小向量的端点。如果您反复执行此操作,则这些点应收敛到最优解。如果点数不是三次方,这甚至也有效。

    【讨论】:

    • 我以前是这样做的,但我现在需要一个确定性的解决方案。
    【解决方案3】:

    您提出的采样策略被称为 Sukharev 网格,它是最优的低离散采样策略,http://planning.cs.uiuc.edu/node204.html。在样本数不是 n^3 的情况下,从采样的角度来看,从网格中选择要省略的点并不重要。

    在实践中,可以使用低差异(准随机)采样技术在三个维度上获得非常好的结果,http://planning.cs.uiuc.edu/node210.html。您可能想看看使用 Halton 和 Hammersley 序列。

    【讨论】:

    • 这个答案很有趣,可能是我正在寻找的,但目前超出了我的理解范围。
    【解决方案4】:

    这看起来与sphere packing有关。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 你如何定义好的RNG?毕竟,如果它是随机的,它不应该为这个问题产生近似值。
      • 我需要一个确定性算法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多