小编典典

在球面上均匀分布n个点

all

我需要一种算法,它可以为我在一个球体周围提供 N 个点(可能小于 20
个)的位置,从而模糊地将它们分散开来。不需要“完美”,但我只需要它,所以它们都不会聚集在一起。

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

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


阅读 63

收藏
2022-08-27

共1个答案

小编典典

此示例中,代码
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

如果你绘制它,你会看到两极附近的垂直间距更大,因此每个点都位于大约相同的空间总 面积 中(在两极附近,“水平”空间较小,所以它给出了更多“垂直” )。

这与与邻居距离大致相同的所有点不同(我认为您的链接正在谈论),但它可能足以满足您的需求,并且只需制作统一的纬度/经度网格即可.

2022-08-27