【发布时间】: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