我需要一种算法,可以为我提供围绕N个点(大概少于20个)的球体位置,并模糊地将它们分散开。不需要“完美”,但是我只需要它,所以它们都不会聚在一起。
我遇到的其他一些问题线程涉及随机均匀分布,这增加了我不关心的复杂程度。我很抱歉这是一个愚蠢的问题,但我想表明我确实看上去很努力,但仍然表现不佳。
因此,我要寻找的是简单的伪代码,以将N个点均匀地分布在一个单位球体上,该点以球形或笛卡尔坐标返回。如果它甚至可以进行一些随机分布,那就更好了(想想围绕一颗恒星的行星,适当散开,但还有回旋余地)。
在此示例中,代码 node[k]只是第k个节点。您正在生成一个数组N个点,它node[k]是第k个(从0到N-1)。如果这一切使您感到困惑,希望您现在就可以使用它。
node[k]
(换句话说,k是大小为N的数组,该数组在代码片段开始之前定义,并且包含点列表)。
k
或者 ,在此处建立另一个答案(并使用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
如果进行绘制,您会发现两极附近的垂直间距较大,因此每个点都位于大约相同的总空间 区域 中(在两极附近,“水平”空间较小,因此“垂直”空间更大) )。
这与所有点到邻居的距离都差不多(这是我认为您的链接所要讨论的)不同,但这可能足以满足您的需求,并且只需制作一个统一的经纬度网格即可进行改进。