猿问

均匀地在球体上分布n个点

均匀地在球体上分布n个点

我需要一个算法,可以给我一个球体周围的位置N点(可能小于20),模糊地将它们展开。没有必要“完美”,但我只是需要它,所以没有一个被捆绑在一起。

  • 这个问题提供了很好的代码,但是我找不到制作这种制服的方法,因为这似乎是100%随机化的。

  • 这个博客文章推荐有两种方式允许输入球体上的点数,但Saff和Kuijlaars算法完全是我可以转录的伪代码,我发现的代码示例包含“node [k]”,我不能看到解释并破坏了这种可能性。第二个博客的例子是黄金分割螺旋,它给了我奇怪的,褶皱的结果,没有明确的方法来定义恒定的半径。

  • 这种算法从这个问题好像它可能工作,但我无法拼凑出那是什么网页上成伪代码或任何东西。

我遇到的一些其他问题主题是随机均匀分布,这增加了我不关心的复杂程度。我很抱歉这是一个如此愚蠢的问题,但我想表明我真的很努力,但仍然很短暂。

所以,我正在寻找的是简单的伪代码,可以在单位球体周围均匀分布N个点,这些点可以返回球形或笛卡尔坐标。如果它甚至可以通过一点随机分布来更好(想想围绕恒星的行星,分散得很好,但有余地的余地)。


慕村225694
浏览 1283回答 3
3回答

郎朗坤

这被称为球体上的包装点,并且没有(已知的)通用的完美解决方案。但是,有很多不完美的解决方案。最受欢迎的三个似乎是:创建一个模拟。将每个点视为约束到球体的电子,然后运行模拟一定数量的步骤。电子的排斥力自然会使系统处于更稳定的状态,在这种状态下,这些点可以得到的距离彼此相差很远。超立方体拒绝。这种奇特的方法实际上非常简单:你在球体周围的立方体内统一选择点(远远超过n它们),然后拒绝球体外的点。将剩余的点视为向量,并将它们标准化。这些是你的“样本” - n使用某种方法(随机,贪婪等)选择它们。螺旋近似。您在球体周围追踪螺旋线,并均匀分布螺旋周围的点。由于所涉及的数学,这些比模拟更复杂,但更快(并且可能涉及更少的代码)。最受欢迎的似乎是Saff等人。一个很多关于这个问题的更多信息,可以发现这里
随时随地看视频慕课网APP
我要回答