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

Dan*_*ous 11 math 3d graphics 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];
}
Run Code Online (Sandbox Code Playgroud)

有许多点的三维球体

具有几个点的三维球体

nbo*_*eel 6

几个选项:

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

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

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


Mic*_*son 0

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

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