假设我有一个带有中心的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];
}
答案 0 :(得分:6)
有几个选择:
随机地在球体上投掷点并使用劳埃德松弛使它们均匀分布:您迭代计算它们的Voronoi图并将它们移向Voronoi单元格的中心(而不是在球体上工作,您可能需要使用仅限于球体的欧几里德voronoi图:例如,CGAL可以用于表示,或参考my article)。
如果粗略近似很好(即,如果均匀随机分布足够好),您可以使用Wiki上解释的公式:N-Sphere。如果没有,您仍然可以使用此随机抽样作为上述方法的初始化
对于等距样本的静止随机但更好的概念,您可以生成泊松磁盘分布。 Robert Bridson's homepage提供高维快速代码。您可能需要将其调整为球形域。
答案 1 :(得分:1)
我不知道这里是否提到过这个问题;但你可以,因为其他人已经从球体上的均匀分布中提出了绘制点。之后,根据columb能量流动每个点;使用梯度下降法。这个特殊问题引起了很多关注。请查看以下paper和this website
答案 2 :(得分:0)
我能想到的唯一可以产生良好结果的方法是。