16 votos

¿Cómo puedo elegir un punto al azar en la superficie de una esfera con una distribución equitativa?

Tengo un generador de números aleatorios que da valores entre 0 y 1, y me gustaría utilizarlo para seleccionar un punto aleatorio en la superficie de una esfera donde todos los puntos de la esfera tienen la misma probabilidad.

La selección de la longitud es fácil, ya que todas las líneas de longitud tienen la misma longitud. x × 360°.

La latitud, en cambio, requiere que el 0° (el ecuador) tenga el doble de probabilidades de ser seleccionado que el 60°. 90° tendría una probabilidad casi nula de ser seleccionado.

18voto

Todd Puntos 173

Como señalas, el elemento de área en la esfera depende de la latitud. Si $u,v$ se distribuyen uniformemente en $[0,1]$ entonces $$\begin{align*} \phi &= 2\pi u \\\\ \theta &= \cos^{-1}(2v-1) \end{align*}$$ se distribuyen uniformemente por la esfera. Aquí $\theta$ representa la latitud y $\phi$ longitud, ambos en radianes. Para más detalles, más métodos y algo de código de Mathematica, véase Selección de puntos de la esfera en MathWorld.

4voto

bea Puntos 16

Elija un número fijo de muestras de su distribución uniforme, digamos 15, céntrelas (es decir, reste 0,5) y súmelas. Esto generará una variable de distribución normal 1D, debido al teorema del límite central.

Ahora haz esto tres veces para obtener tres variables aleatorias de distribución normal 1D, y utiliza una para cada coordenada de un vector. Esto dará lugar a un único vector de distribución normal 3D, debido a las propiedades de las distribuciones normales.

Ahora divide el vector por su longitud para normalizarlo. Esto dará como resultado un vector aleatorio uniformemente distribuido en la esfera debido a que las distribuciones normales son radialmente simétricas.

Código Matlabish:

xx = rand(1,15) - .5;
yy = rand(1,15) - .5;
zz = rand(1,15) - .5;

x=sum(xx); y=sum(yy); z=sum(zz);
v = [x y z]./norm([x y z],2);

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X