首页 > 解决方案 > 尽管对 theta 和 phi 使用均匀分布,但用于球体生成的点非常密集的区域

问题描述

我正在设置一个数据集,目标是制作一个沿径向具有正态分布的球体,以及均匀的 theta 和 phi 分布。尽管对 theta 和 phi 使用了均匀分布,但我仍然在极点处获得非常密集的点区域(在 z 轴上对称地接近 +/- 半径),这些点的大小很小但很明显。我也在写入一个文件并使用 ROOT 来绘制我的结果。

我尝试减少 theta 和 phi 的范围以绘制半个球体,但在这两种情况下问题仍然存在。我还将半径设置为常数,以确保不会干扰极点的形成。两极仍然形成。

    #Size is the number of points to generate, and n is the dimension of the problem (n=2 for circle, n=3 for sphere, etc.)
    hs_points = np.zeros((size, n)) 
    for i in range(size):

        hs_point = hs_points[i]
        for j in range(n):
            if j == 0:
                # normal distribution on radius
                coord = np.random.normal(mu, sigma)

            elif j < n-1:
                 coord=round(random.uniform(0,np.pi),15)


            else:
                coord = np.random.rand()*(2*np.pi)
                hs_point[j] = coord
        hs_points[i] = hs_point
    return hs_points


    c_points = np.zeros((size, n))
    # translate each hyperspherical point into a cartesian point
    for i in range(size):   
          hs_point = hs_points[i]
          xCoord=hs_point[0]*np.sin(hs_point[1])*np.cos(hs_point[2])      
          yCoord=hs_point[0]*np.sin(hs_point[1])*np.sin(hs_point[2])
          zCoord=hs_point[0]*np.cos(hs_point[1])

          c_points[i,0]=xCoord
          c_points[i,1]=yCoord
          c_points[i,2]=zCoord

我希望程序输出一个“模糊”球体,其沿径向呈正态分布,但在其他地方具有统一的行为(即没有特别密集的区域)。实际行为是在其他地方产生具有一致行为的密集极点。

标签: pythonnumpydata-generation

解决方案


推荐阅读