En el caso de un círculo, basta con generar un ángulo uniforme, $\theta$ , en $[0,2\pi)$ y luego hacer el radio, $r$ , lo que se desee. Si quiere coordenadas cartesianas, en lugar de polares, $x=r\cos\theta$ y $y=r\sin\theta$ .
Una forma realmente fácil de generar puntos aleatorios a partir de una distribución uniforme una d-esfera (una hiperesfera en un espacio de dimensión arbitraria $d+1$ con superficie de dimensión $d$ ), es generar normales estándar multivariadas $X_i\sim N_{d+1}(0,I)$ y luego escalar por su distancia al origen:
$$Y_i=X_i/||X_i||\,,$$
donde $||.||$ es el Norma euclidiana .
En R, generemos en la superficie de una (2-)esfera:
x <- matrix(rnorm(300),nc=3)
y <- x/sqrt(rowSums(x^2))
head(y)
[,1] [,2] [,3]
[1,] 0.9989826 -0.03752732 0.02500752
[2,] -0.1740810 0.08668104 0.98090887
[3,] -0.7121632 -0.70011994 0.05153283
[4,] -0.5843537 -0.49940138 0.63963192
[5,] -0.7059208 0.20506946 0.67795451
[6,] -0.6244425 -0.70917197 0.32733262
head(rowSums(y^2))
[1] 1 1 1 1 1 1
Aquí están esos datos desde dos ángulos ligeramente diferentes:
Luego puedes escalar a cualquier otro radio que desees.
En dimensiones bajas, hay formas más rápidas, pero si tu generador de números aleatorios normal es razonablemente rápido, es bastante bueno en dimensiones más altas.
Existen varios paquetes en CRAN para las estadísticas circulares, entre ellos CircStats
y circular
. Probablemente haya algo en CRAN que genere distribuciones uniformes en n-esferas para n>1, pero no lo conozco.
0 votos
Véase, por ejemplo, Lovisolo, da Silva. Distribución uniforme de puntos en una hiperesfera con aplicaciones a la codificación vectorial de planos de bits . No hay ningún código listo en el artículo, sino el algoritmo. Si no puedes encontrar el pdf, envíame un correo electrónico.
1 votos
La generación de puntos uniformes en una esfera se describe en stats.stackexchange.com/questions/7977/ el método se generaliza directamente a todas las demás dimensiones. Pero el título de esta pregunta parece tener poco o nada que ver con la pregunta en sí, que pide una distribución uniforme en el círculo junto con el "ruido gaussiano" aditivo en la dirección radial. Por eso he editado el título para cambiar "hiperesfera" por "círculo".