2017-10-19 8 views
3

J'ai essayé de générer des points aléatoires à l'intérieur sphère en utilisant les commandes suivantes avec centre à l'origine en utilisant le code suivantComment générer des points aléatoires à l'intérieur sphère en utilisant Matlab

no_of_spots = 3000 
radius=20 
rvals = (2)*rand(no_of_spots,1)-(1); 
elevation = asin(rvals); 
azimuth = 2*pi*rand(no_of_spots,1); 
radii = rand(no_of_spots,1)*radius; 
[point_x,point_y,point_z] = sph2cart(azimuth,elevation,radii); 

J'ai obtenu des résultats comme sphere with random points

De la figure ce sont des points aléatoires concentrés près de l'origine, c'est-à-dire ressemblant à une distribution gaussienne. J'ai besoin de points aléatoires répartis uniformément dans la sphère ou j'ai besoin de déplacer la concentration des points du centre vers un autre point. Comment puis-je faire/Quelqu'un peut-il aider/ Merci à l'avance, Manu

+0

double possible de [échantillonnage uniformément distribué des points aléatoires dans un volume sphérique] (https://stackoverflow.com/questions/5408276/sampling-uniformly-distributed-random-points-inside-a-spherical-volume) – buzjwa

Répondre

4

Si vous modifier votre ligne de radii:

radii = rand(no_of_spots,1)*radius; 

Pour:

radii = (rand(no_of_spots,1).^(1/3))*radius; 

Vous devriez obtenir une plus distribution uniforme.

C'est ce que Knuth a décrit dans L'art de la programmation par ordinateur. Vol. 2 et est référencé here.

+1

merci vous pour votre réponse – manoos