【问题标题】:How to plot N points on the surface of a D-dimensional sphere roughly equidistant apart?如何在大致等距的 D 维球体表面上绘制 N 个点?
【发布时间】:2012-09-23 22:21:31
【问题描述】:

假设我有一个 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];
}

【问题讨论】:

  • 标签上写着“3D”,问题上写着“D维球体”。它是哪一个?有许多机制可以将点(有点)均匀地分布在 2 球体(即 3 维空间中的球体)上。一般来说,没有很好的解决方案,因为即使是 2-sphere 也不会形成拓扑群。唯一可以做到的是 0 球体(一对点)、1 球体(一个圆)和 3 球体(其中一个表示是单位四元数)。
  • @Ali 涉及随机点的解决方案只是该问题的一类解决方案。例如,我会对涉及将 n 球体创建为挤压 (n-1) 球体的解决方案感兴趣(虽然我不知道是否可以这样做,但它似乎很现实)。
  • 我不明白为什么这是重复的:这里的问题是生成均匀分布点。这不一定与随机分布相同(尽管如果我们对“均匀”有一个灵活的定义,这可能是一种选择)。
  • 很容易想出一个算法来做到这一点,但是否实用取决于D和总点数。如果 D 很小、2(非常容易)、3 或 4,那么一些暗示退火或排斥的答案可能会起作用。但是如果 D 是五十,而 P 是几百万,那不是这样做的。

标签: math graphics 3d trigonometry vector-graphics


【解决方案1】:

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

【讨论】:

【解决方案2】:

几个选项:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2015-10-24
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多