12

假设我有一个 D 维球体,中心为 [C1, C2, C3, C4, ... CD],半径为 R。现在我想绘制 N 个均匀分布的点(彼此等距)在球体表面。这些点的确切位置并不重要,只是它们彼此之间的距离大致相等。我想要一个返回这些点数组的函数,P。

function plotter(D, C[1...D], R, N)
{
   //code to generate the equidistant points on the sphere

   return P[1...N][1...D];
}

具有许多点的 3 维球体

具有几个点的 3 维球体

4

3 回答 3

6

几个选项:

  • 在球体上随机抛出点并使用劳埃德松弛使它们均匀分布:您迭代地计算它们的 Voronoi 图并将它们移向它们的 Voronoi 单元的中心(而不是在球体上工作,您可能想要使用欧几里德 voronoi 图仅限于领域:例如,CGAL 可以做到这一点,或参考我的文章)。

  • 如果粗略的近似值很好(即,如果均匀随机分布足够好),您可以使用 Wiki 上解释的公式:N-Sphere。如果没有,你仍然可以使用这个随机抽样作为上述方法的初始化

  • 对于仍然随机但更好的等距样本概念,您可以生成泊松磁盘分布。Robert Bridson 的主页上提供了高维快速代码。不过,您可能需要将其调整为球形域。

于 2012-10-05T01:36:45.380 回答
1

我不知道这里是否已经提到过;但是您可以,正如其他人建议的那样,从球体上的均匀分布中绘制点。之后,根据柱能流过每个点;使用梯度下降法。这个特殊的问题受到了很多关注。查看以下论文本网站

于 2013-02-19T07:29:00.790 回答
0

我能想到的唯一方法应该会产生好的结果。

  1. 在球面上生成 N 个点。对高维执行此操作的常用方法是根据 D 维正态分布生成点并归一化回球体。这些不会等距 - 所以我们需要第二步
  2. 接下来使用一些排斥函数使每个点排斥其他点并使用一个小的时间步长,将运动方向调整为与 D-Sphere 相切。移动该点,然后重新投射回球体。继续这样做,直到你认为这些点足够多。
于 2012-10-03T03:40:35.270 回答