44 votos

Cómo encontrar un azar del eje o de la unidad de vectores en 3D?

Me gustaría generar un azar del eje o de la unidad de vectores en 3D. En 2D sería fácil, tan sólo yo pudiera escoger un ángulo entre 0 y 2*Pi y utilizar el vector unitario que apunta en esa dirección.

Pero en 3D no sé cómo puedo elegir un punto al azar en una superficie de una esfera.

Si yo escojo dos ángulos de la distribución no uniforme de la superficie de la esfera. No sería más puntos en los polos y menos puntos en el ecuador.

Si he de elegir un punto al azar en el (-1,-1,-1):(1,1,1) cubo y normalizar, entonces no habría más posibilidades de que un punto se pone elegido a lo largo de las diagonales que desde el centro de los lados. Así que eso no es bueno tampoco.

Pero entonces, ¿cuál es la buena solución?

45voto

seanyboy Puntos 3170

Usted necesidad de utilizar una igual en el área de proyección de la esfera sobre un rectángulo. Estas proyecciones son ampliamente utilizados en la cartografía para dibujar mapas de la tierra que representan áreas con precisión.

Uno de los más simples tales proyecciones es la proyección axial de una esfera en la superficie lateral de un cilindro, como se ilustra en la siguiente figura:

Cylindrical Projection

Esta proyección es el área de preservación, y fue utilizado por Arquímedes para calcular el área de la superficie de una esfera.

El resultado es que usted puede elegir un punto al azar en la superficie de una unidad de la esfera utilizando el siguiente algoritmo:

  1. Elija un valor aleatorio de $\theta$ entre $0$ y $2\pi$.

  2. Elija un valor aleatorio de $z$ entre $-1$ y $1$.

  3. Calcular el punto resultante: $$ (x,y,z) \;=\; \left(\sqrt{1-z^2}\cos \theta,\; \sqrt{1-z^2}\sin \theta,\ z\right) $$

15voto

Matt Puntos 2318

También puede hacer esto. Generar tres números aleatorios $(a,b,c)$ en $[-1,1]$; si $a^2 + b^2 + c^2\le 1$, entonces normalizar ellos. De lo contrario, intente de nuevo y elegir trillizos hasta que haya un utilizable triplete. El volumen del cubo, podemos elegir es 8. El volumen de la unidad de la bola es de $4/3\pi$, por lo general, tendrán que elegir aproximadamente dos triples para conseguir una buena vector aleatorio en la esfera.

4voto

John Smithers Puntos 1459

Cortesía de la total Compendio de gráficos por ordenador:

En coordenadas esféricas, establece:

$$ r = \text{radio} $$

$$ \theta = \arccos( 1 - 2\zeta_1 ) $$

$$ \phi = 2 \pi \zeta_2 $$

Donde $\theta$ es el ángulo de inclinación (medido desde el cenit) y $\phi$ es el ángulo azimutal (medido desde el eje x).

$\zeta_1$ es una variable aleatoria uniformemente distribuida en $[0,1]$. $\zeta_2$ es otra variable aleatoria uniformemente distribuida en $[0,1]$.

enter image description here

3voto

Andrew Puntos 140

George Marsaglia, en este trabajo, da la siguiente propuesta:

Mantenga independiente de la generación de valores aleatorios $v_1$ y $v_2$ en $(-1,1)$ hasta $s=v_1^2+v_2^2 < 1$, entonces el punto al azar en la esfera de la forma $(2v_1\sqrt{1-s},2v_2\sqrt{1-s},1-2s)$

Ver el artículo para obtener más detalles sobre cómo funciona.

1voto

Reto Meier Puntos 55904

Otra comúnmente utilizado método conveniente de generar un aleatorios uniformes punto de la esfera en $\mathbb{R}^3$ es esta: Generar un estándar de la multivariante aleatoria normal del vector $(X_1, X_2, X_3)$, y luego normalizar a tiene longitud 1. Es decir, $X_1, X_2, X_3$ son tres independiente aleatoria normal estándar de los números. Hay muchas formas bien conocidas para generar normal de números aleatorios; uno de los más simples es el de Box-Muller algoritmo que produce de dos en dos.

Esto funciona debido a que el estándar de la distribución normal multivariante es invariante bajo de rotación (es decir, transformaciones ortogonales).

Esto tiene la propiedad de generalizar inmediatamente a cualquier número de dimensiones, sin necesidad de ningún pensamiento más.

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