Tengo una esfera de radio $R_{s}$ y me gustaría elegir puntos al azar en su volumen con una probabilidad uniforme. ¿Cómo puedo hacerlo evitando cualquier tipo de agrupación alrededor de los polos o del centro de la esfera?
Ya que soy incapaz de responder a mi propia pregunta, he aquí otra solución:
Utilizando la estrategia sugerida por Wolfram MathWorld para elegir puntos en la superficie de una esfera: Sea $\theta$ sean números reales distribuidos aleatoriamente en el intervalo $[0,2\pi]$ , dejemos que $\phi=\arccos(2v−1)$ donde $v$ es un número real aleatorio en el intervalo $[0,1]$ y que $r=R_s (\mathrm{rand}(0,1))^\frac13$ . Convirtiendo de coordenadas esféricas, un punto aleatorio en $(x,y,z)$ dentro de la esfera sería por tanto: $((r\cos(\theta)\sin(\phi)),(r\sin(\theta)\sin(\phi)),(r\cos(\phi)))$ .
Una prueba rápida con algunos miles de puntos en la esfera de la unidad parece no mostrar ninguna agrupación. Sin embargo, agradecería cualquier comentario si alguien ve un problema con este enfoque.
0 votos
Resumen: Nate propuso un método de transformación, mientras que Kevin propuso un método de rechazo.
0 votos
Creo que la solución que has sacado de MathWorld es sólida, aunque un poco más lenta que los planteamientos propuestos en la respuesta (¡evaluar funciones trascendentales es caro!).
1 votos
No sé mucho pero, mi enfoque sería algo parecido a elegir un polo al azar desde la superficie hasta el centro y luego elegir un punto en esa línea donde la probabilidad es mayor cuanto más cerca de la superficie, para tener en cuenta la expansión de la esfera.
0 votos
Solución en código Matlab, donde
D
es la dimensión yN
es el número de puntos:points=zeros(N,D); for i=1:N; direction=randn(1,D); direction=direction/norm(direction); points(i,:)=direction*(rand^(1./D)); end