He publicado una pregunta anterior , esto está relacionado, pero creo que es mejor comenzar otro hilo. Esta vez, me pregunto cómo generar puntos distribuidos uniformemente dentro de la esfera de la unidad tridimensional y cómo verificar la distribución visual y estadísticamente también. No veo las estrategias publicadas allí directamente transferibles a esta situación.
random-generation
Qiang Li
fuente
fuente
Respuestas:
La forma más fácil es muestrear puntos uniformemente en el hipercubo correspondiente y descartar aquellos que no se encuentran dentro de la esfera. En 3D, esto no debería suceder tan a menudo, aproximadamente el 50% del tiempo. (El volumen del hipercubo es 1, el volumen de la esfera es )43πr3=0.523...
fuente
También puede hacer esto en coordenadas esféricas, en cuyo caso no hay rechazo. Primero genera el radio y los dos ángulos al azar, luego usa la fórmula de transición para recuperar , y ( , , ).x y z x=rsinθcosϕ y=rsinθsinϕ z=rcosθ
Generas unifomly entre y . Sin embargo, el radio y la inclinación no son uniformes. La probabilidad de que un punto esté dentro de la bola de radio es por lo que la función de densidad de probabilidad de es . Puede verificar fácilmente que la raíz cúbica de una variable uniforme tiene exactamente la misma distribución, por lo que así es como puede generar . La probabilidad de que un punto se encuentre dentro de un cono esférico definido por la inclinación es o siϕ 0 2π r θ r r3 r 3r2 r θ (1−cosθ)/2 1−(1−cos(−θ))/2 θ>π/2 . Entonces la densidad es . Puede verificar que menos el arcocoseno de una variable uniforme tenga la densidad adecuada.θ sin(θ)/2
O más simplemente, podemos simular el coseno de uniformemente entre y .θ −1 1
En R esto se vería como se muestra a continuación.
Al escribir y editar esta respuesta, me di cuenta de que la solución es menos trivial de lo que pensaba.
Creo que el método más fácil y computacionalmente más eficiente es seguir el método de @ whuber para generar en la esfera de la unidad como se muestra en esta publicación y escalarlos con .(x,y,z) r
fuente
d
. Para esto, reemplace todas las instancias de3
byd
.En mi opinión, la opción más fácil que también se generaliza a bolas de dimensiones superiores (que no es el caso de las coordenadas esféricas y aún menos el caso del muestreo de rechazo) es generar puntos aleatorios que son productos de dos variables aleatorias donde es una variable aleatoria gaussiana (es decir, isotrópica, es decir, apunta uniformemente en cualquier dirección) normalizada de modo que se encuentra en la esfera y que es una variable aleatoria uniforme en a la potencia , siendo la dimensionalidad de los datos, cuidando el radio.P = N / | El | N | El | ∗ U 1 / n N U [ 0 , 1 ] 1 / n nP P=N/||N||∗U1/n N U [0,1] 1/n n
Et voilà!
fuente