Números aleatorios dentro de una esfera
Este ejemplo muestra cómo crear puntos aleatorios dentro del volumen de una esfera, como describe Knuth [1]. La esfera de este ejemplo está centrada en el origen y tiene un radio de 3.
Una forma de crear puntos dentro de una esfera es especificarlos en coordenadas esféricas. Luego puede convertirlos a coordenadas cartesianas para representarlos.
Primero, inicie el generador de números aleatorios para hacer que los resultados de este ejemplo sean repetibles.
rng(0,'twister')
Calcule el ángulo de elevación de cada punto de la esfera. Estos valores están en el intervalo abierto , pero no están distribuidos de manera uniforme.
rvals = 2*rand(1000,1)-1; elevation = asin(rvals);
Cree el ángulo azimut de cada punto de la esfera. Estos valores están distribuidos de manera uniforme en el intervalo abierto .
azimuth = 2*pi*rand(1000,1);
Cree el valor radial de cada punto de la esfera. Estos valores están en el intervalo abierto , pero no están distribuidos de manera uniforme.
radii = 3*(rand(1000,1).^(1/3));
Conviértalo a coordenadas cartesianas y represente el resultado.
[x,y,z] = sph2cart(azimuth,elevation,radii); figure plot3(x,y,z,'.') axis equal
Si quiere situar números aleatorios en la superficie de la esfera, especifique un valor radial constante como último argumento de entrada para sph2cart
. En este caso, el valor es 3
.
[x,y,z] = sph2cart(azimuth,elevation,3);
Referencias
[1] Knuth, D. The Art of Computer Programming. Vol. 2, 3rd ed. Reading, MA: Addison-Wesley Longman, 1998, pp. 134–136.