Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Números aleatorios dentro de una esfera

Este ejemplo muestra cómo crear puntos aleatorios dentro del volumen de una esfera, como se describe en Knuth.[1] La esfera en este ejemplo se centra en el origen y tiene un radio de 3.

Una forma de crear puntos dentro de una esfera es especificarlos en coordenadas esféricas. A continuación, puede convertirlos a coordenadas cartesianas para trazar.

En primer lugar, inicialice el generador de números aleatorios para que los resultados de este ejemplo sean repetibles.

rng(0,'twister')

Calcule un ángulo de elevación para cada punto de la esfera. Estos valores están en el intervalo abierto,

<math display="block">
<mrow>
<mo stretchy="false">(</mo>
<mo>-</mo>
<mi>π</mi>
<mo>/</mo>
<mn>2</mn>
<mo>,</mo>
<mi>π</mi>
<mo>/</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
</mrow>
</math>
, pero no se distribuyen uniformemente.

rvals = 2*rand(1000,1)-1; elevation = asin(rvals);

Cree un ángulo acimut para cada punto de la esfera. Estos valores se distribuyen uniformemente en el intervalo abierto,

<math display="block">
<mrow>
<mo stretchy="false">(</mo>
<mn>0</mn>
<mo>,</mo>
<mn>2</mn>
<mi>π</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
.

azimuth = 2*pi*rand(1000,1);

Cree un valor de radio para cada punto de la esfera. Estos valores están en el intervalo abierto,

<math display="block">
<mrow>
<mo stretchy="false">(</mo>
<mn>0</mn>
<mo>,</mo>
<mn>3</mn>
<mo stretchy="false">)</mo>
</mrow>
</math>
, pero no se distribuyen uniformemente.

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

Convertir a coordenadas cartesianas y trazar el resultado.

[x,y,z] = sph2cart(azimuth,elevation,radii); figure plot3(x,y,z,'.') axis equal

Si desea colocar números aleatorios de la esfera, especifique un valor de radio constante para que sea el último argumento de entrada.on the surfacesph2cart 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.