Области очень плотных точек для генерации сферы, несмотря на использование равномерных распределений для тэты и фи
Я устанавливаю набор данных, и цель состоит в том, чтобы создать сферу с нормальным распределением вдоль радиального направления и равномерным распределением тэта и фи. Несмотря на использование равномерных распределений для тэты и фи, я продолжаю получать области очень плотных точек на полюсах (симметрично вблизи +/- радиуса на оси z), которые имеют небольшой, но заметный размер. Я также пишу в файл и использую ROOT для отображения своих результатов.
Я попытался уменьшить диапазон тэты и фи до графика половины сферы, но проблема все еще сохраняется в обоих случаях. Я также установил постоянный радиус, чтобы убедиться, что он не мешает формированию полюсов. Полюса еще сформировались.
#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
Я ожидаю, что программа выведет "нечеткую" сферу с нормальным распределением вдоль радиального направления, но с равномерным поведением повсюду (т.е. без особо плотных областей). Фактическое поведение - это генерация плотных полюсов с однородным поведением повсюду.