在球体上平均分配n个点

我需要一种算法,可以为我提供围绕N个点(大概少于20个)的球体位置,并模糊地将它们分散开。不需要“完美”,但是我只需要它,所以它们都不会聚在一起。

  • 这个问题提供了很好的代码,但是我找不到使这种统一的方法,因为这似乎是100%随机的。
  • 推荐的这篇博客文章有两种方法可以输入球体上的点数,但是Saff和Kuijlaars算法恰好是我可以转录的伪代码,而我发现的代码示例包含“ node [k]”,而我无法看到解释并破坏了这种可能性。第二个博客示例是“黄金分割螺旋”,它给了我奇怪的,成堆的结果,但没有明确的方法来定义恒定半径。
  • 这种算法从这个问题好像它可能工作,但我不能拼凑那是什么网页上成伪代码或任何东西。

我遇到的其他一些问题线程涉及随机均匀分布,这增加了我不关心的复杂程度。我很抱歉这是一个愚蠢的问题,但我想表明我确实看上去很努力,但仍然表现不佳。

因此,我要寻找的是简单的伪代码,以将N个点均匀地分布在一个单位球体上,该点以球形或笛卡尔坐标返回。如果它甚至可以进行一些随机分布,那就更好了(想想围绕一颗恒星的行星,适当散开,但还有回旋余地)。

回答:

在此示例中,代码

node[k]只是第k个节点。您正在生成一个数组N个点,它node[k]是第k个(从0到N-1)。如果这一切使您感到困惑,希望您现在就可以使用它。

(换句话说,k是大小为N的数组,该数组在代码片段开始之前定义,并且包含点列表)。

或者 ,在此处建立另一个答案(并使用Python):

> cat ll.py

from math import asin

nx = 4; ny = 5

for x in range(nx):

lon = 360 * ((x+0.5) / nx)

for y in range(ny):

midpt = (y+0.5) / ny

lat = 180 * asin(2*((y+0.5)/ny-0.5))

print lon,lat

> python2.7 ll.py

45.0 -166.91313924

45.0 -74.0730322921

45.0 0.0

45.0 74.0730322921

45.0 166.91313924

135.0 -166.91313924

135.0 -74.0730322921

135.0 0.0

135.0 74.0730322921

135.0 166.91313924

225.0 -166.91313924

225.0 -74.0730322921

225.0 0.0

225.0 74.0730322921

225.0 166.91313924

315.0 -166.91313924

315.0 -74.0730322921

315.0 0.0

315.0 74.0730322921

315.0 166.91313924

如果进行绘制,您会发现两极附近的垂直间距较大,因此每个点都位于大约相同的总空间 区域 中(在两极附近,“水平”空间较小,因此“垂直”空间更大) )。

这与所有点到邻居的距离都差不多(这是我认为您的链接所要讨论的)不同,但这可能足以满足您的需求,并且只需制作一个统一的经纬度网格即可进行改进。

以上是 在球体上平均分配n个点 的全部内容, 来源链接: utcz.com/qa/411661.html

回到顶部