在 N 维 space 中均匀分布点的算法

algorithm to evenly distribute points in N-dimensional space

我需要在 space 中(大致)均匀分布点,但维数不固定。

我看过 Fibonacci Sphere 算法,但由于它对 x,z 使用 sin+cos,所以它似乎只适用于 3D space。我也看到了向日葵螺旋算法,但它同样仅限于二维。

有没有一个通用的算法可以

  1. 点数
  2. 多个维度

并在整个过程中传播点数?

我们可以通过将每个维度划分为 k 个大小相等的区域,用 k^n 个 n 维超立方体填充您的 space。

给定 r 个点和 n 个维度,我们希望 r = k^n,所以 k = r^(1/n)。

例如,对于 1000 个点和 2 个维度,我们需要 k = 1000^(1/2) = 每个维度 31.6 个区域,但是对于 3 个维度,我们需要 k = 1000^(1/3) =每个维度 10 个区域。

对于非整数值,我建议向上舍入(因此 31.6 变为 32)。这将为您提供比点数更多的单元格。您可以 select 哪些单元格不会随机获得点,或者将它们分布到边缘或按您喜欢的方式分布。

一旦你有了应该有点的单元格,随机分配 1 个点到每个单元格内的一个位置,为每个维度选择一个介于 0-1 之间的浮点数作为单元格内该维度的轴段上的点位置。

由于单元格是完美分布的(除了可能有一些额外的空单元格)并且每个单元格有一个点,所以这些点在 space 中合理分布,同时仍然是随机的。