如何在D维球体的表面上绘制大致等距的N点?

时间:2012-10-03 01:45:58

标签: math graphics 3d trigonometry vector-graphics

假设我有一个带有中心的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-dimensional sphere with many points

3-dimensional sphere with a few points

3 个答案:

答案 0 :(得分:6)

有几个选择:

  • 随机地在球体上投掷点并使用劳埃德松弛使它们均匀分布:您迭代计算它们的Voronoi图并将它们移向Voronoi单元格的中心(而不是在球体上工作,您可能需要使用仅限于球体的欧几里德voronoi图:例如,CGAL可以用于表示,或参考my article)。

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

  • 对于等距样本的静止随机但更好的概念,您可以生成泊松磁盘分布。 Robert Bridson's homepage提供高维快速代码。您可能需要将其调整为球形域。

答案 1 :(得分:1)

我不知道这里是否提到过这个问题;但你可以,因为其他人已经从球体上的均匀分布中提出了绘制点。之后,根据columb能量流动每个点;使用梯度下降法。这个特殊问题引起了很多关注。请查看以下paperthis website

答案 2 :(得分:0)

我能想到的唯一可以产生良好结果的方法是。

  1. 在球体表面上生成N个点。对高维度执行此操作的常用方法是根据D维正态分布生成点并将其归一化回球体。这些不会是等间隔的 - 所以我们需要第二步
  2. 接下来,使用一些排斥功能使每个点排斥其他点并使用一个小的时间步长,您将运动方向调整为与D-Sphere相切。移动该点然后重新回弹到球体。继续这样做,直到你考虑到这些点为止。