6 votos

Dibujo de líneas al azar en un cilindro - ¿Cómo se realiza la distribución de los ángulos?

Tenemos un 3D cilindro con un radio de $r = 1$ y una altura de $h = 2$.

enter image description here

Ahora, tomamos dos puntos al azar en los bordes del cilindro - uno para la parte superior y otro para la parte inferior del círculo. Mediante la conexión de los dos puntos con una línea lo que podemos hacer es calcular el ángulo entre la línea y la vertical del eje z.

Repetimos este procedimiento $N$-tiempos y recoger todos los ángulos aleatorios.

¿Qué podemos decir?

  • El ángulo mínimo debería ser $0$°, el caso en el que elegir dos puntos poniendo en la parte superior de uno al otro que nos da una línea paralela al eje z.
  • El ángulo máximo debería ser $45$° - que se decidió por nosotros por $r$$h$.

Mi pregunta aquí es ¿qué distribución de los ángulos que debe conseguir. La ejecución de un experimento que me va a dar la siguiente distribución:

enter image description here

Que es un poco de sentido común - al menos para mí - me espera una distribución uniforme, para ser honesto. Así que, espero no cometer un error en mi código, que es la razón por la que proporcione el código de experimento a continuación.

En cualquier caso, yo estaría interesado en saber si esta distribución tiene sentido y si es posible de explicar.

Una cosa que sin duda es importante: np.random.rand() dibuja uniforme de los valores de $x \in [0,1]$, por lo que los puntos en los bordes (v y w) debe ser uniforme.

%matplotlib inline  # Jupyter Notebooks
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.cm as cm
import seaborn as sns
import numpy as np
import pandas as pd

def angle(a, b):    
    a_u = a / np.linalg.norm(a)
    b_u = b / np.linalg.norm(b)    
    c = np.clip(np.dot(a_u, b_u), -1, 1)    
    return np.degrees(np.arccos(c))

# Create the random points on the cylinder's edges
N = 5000
a = 2 * np.pi * np.random.rand(N) 
b = 2 * np.pi * np.random.rand(N)
v = np.vstack([np.cos(a), np.sin(a), 2*np.ones(N)]).T
w = np.vstack([np.cos(b), np.sin(b), np.zeros(N)]).T
df_v = pd.DataFrame(v, columns=['x', 'y', 'z'])
df_w = pd.DataFrame(w, columns=['x', 'y', 'z'])
# Get the connecting lines
df_u = df_v - df_w

# Calculate the angles of the lines w.r.t. the z-axis
e3 = np.asarray([0, 0, 1])
ds_angles = df_u.apply(lambda x: angle(x, e3), 1)

# Plotting the distribution of angles
ax = plt.figure(figsize=(8, 4.5)).gca()
sns.distplot(df_u.apply(lambda x: angle(x, e3), 1), ax=ax, kde=False)
plt.xlabel('Degree')
plt.show()

4voto

Fimpellizieri Puntos 155

Deje $X$ el valor del punto en el círculo de abajo, y $Y$ el valor del punto en el círculo de arriba. Para cualquier $X$, con una probabilidad de $1/2$ tendríamos que $Y$ se encuentra en el semi-círculo cuyo punto medio es directamente encima de $X$.

Esto significa que con una probabilidad de $1/2$, el ángulo se encuentra entre el$0$$\arccos(2/\sqrt6)\simeq 35.26^{\circ}$. Por lo tanto, la suposición de que la distribución de los ángulos serían uniformes es errónea, y cerca de la mitad del tiempo de los ángulos debe estar entre $35.26^{\circ}$ $45^{\circ}$ (que está lejos de la mitad de los ángulos posibles).


He aquí un intento de calcular las cosas de manera más explícita. Deje $X, Y$ ser uniforme en el círculo de la $C=\left\{(x,y,0)\in\mathbb R^3\,|\,x^2+y^2=1\right\}$. Su línea aleatoria tiene la dirección $\big(Y+(0,0,2)\big) - X$. Con $W = Y-X$, $h=(0,0,2)$ y $Z$ el coseno del ángulo entre la línea que una la $z$-eje, tenemos

$$Z = \frac{\langle W+h, (0,0,1)\rangle}{\lVert W+h\rVert} = \frac2{\lVert W+h\rVert}.$$

Esto implica

$$Z^2 = \frac{4}{4 + {\lVert W\rVert}^2} = \frac1{1+{\left\lVert\frac{W}2\right\rVert}^2}.$$

Si $\theta_1,\theta_2 \sim \text{Unif}([0,2\pi])$,$X\sim \big(\cos(\theta_1),\sin(\theta_1)\big)$$Y\sim \big(\cos(\theta_2),\sin(\theta_2)\big)$, de modo que $W\sim\big(\cos(\theta_1)-\cos(\theta_2),\sin(\theta_1)-\sin(\theta_2)\big)$. Por lo tanto,

\begin{align} {\left\lVert\frac{W}2\right\rVert}^2 &\sim \frac14\left( \underbrace{(\cos\theta_1)^2+(\cos\theta_2)^2}_1-2\cos\theta_1\cos\theta_2 + \underbrace{(\sin\theta_1)^2+(\sin\theta_2)^2}_1-2\sin\theta_1\sin\theta_2 \right) \\&= \frac14\left( 2 - 2\cos\theta_1\cos\theta_2 - 2\sin\theta_1\sin\theta_2 \right) \\&= \frac12\big( 1 - (\cos\theta_1\cos\theta_2 + \sin\theta_1\sin\theta_2) \big) \\&= \frac12\big( 1 - \cos(\theta_1-\theta_2) \big) = \frac12 - \frac{\cos(\theta_1-\theta_2)}2 . \end{align}

Por lo tanto

$$Z^2 \sim \frac{2}{3-\cos(\theta_1-\theta_2)}.$$

La observación de que $Z\geq 0$, se deduce que el ángulo de $\alpha$ es distribuido como

$$\alpha \sim \arccos\left(\sqrt{\frac{2}{3-\cos(\theta_1-\theta_2)}}\right),$$

donde $\theta_1,\theta_2 \sim \text{Unif}([0,2\pi])$. A partir de aquí, podemos calcular el $\mathbb P(\alpha \leq x)$ $0<x<\pi/4$ como un área en la plaza de la $[0,2\pi]^2$ contenida en el $\theta_1$-$\theta_2$ plano.

Alternativamente, podemos observar que la $\Theta = \theta_1-\theta_2$ ha pdf con apoyo en $[-2\pi,2\pi]$ dada por

$$f_{\Theta}(z) = \left\{\begin{array}{cccc} \frac{2\pi+z}{4\pi^2}&&&-2\pi\leq z <0\\ \frac{2\pi-z}{4\pi^2}&&&0\leq z \leq 2\pi \end{array}\right. $$

A continuación, algunas manipulaciones algebraicas muestran que

$$\mathbb P(\alpha \leq x) = \mathbb P\left(\cos(\Theta) \geq 3-\frac{2}{{\cos(x)}^2}\right) .$$

Usando el pdf anterior, podemos calcular esto claramente en términos de las integrales que simplificar para

$$\mathbb P(\alpha \leq x) = \frac{1}{\pi}\,\arccos\left(3-\frac{2}{{\cos(x)}^2}\right) .$$

La función de densidad de $f_\alpha$ $\alpha$ tiene apoyo en $[0,\pi/4]$, y según Wolfram , tenemos (después de las simplificaciones, teniendo en cuenta su apoyo) que es igual a

$$f_{\alpha}(z) = \frac{2}{\pi}\,\frac{1}{\cos(z)\,\sqrt{\cos(2z)}},$$

cual es la forma más simple de lo que esperaba, para ser honesto. Observar que es de hecho una función de densidad de probabilidad, que es no negativo y su integral es $1$.

Su histograma hace algo se parecen el área bajo $f_{\alpha}$, como se puede comprobar aquí, así que esto parece más un caso de "mal de la intuición' que de 'código incorrecto'.


Debo señalar que este arroja luz a otro lugar curioso de identidad que involucra $\pi$:

$$\int_{\sqrt{2}/2}^1\,\,\,\frac{1}{u\,\sqrt{2u^2-1}\,\sqrt{1-u^2}}\,\,\,du = \frac\pi2$$ $${}$$ $$\int_{1/2}^1\,\,\,\frac{1}{u\,\sqrt{2u-1}\,\sqrt{1-u}}\,\,\,du = \pi$$

3voto

Maxim Puntos 146

Es posible encontrar la forma cerrada de la cdf. El ángulo es $$A = \arccos \frac {((\cos v, \sen v, 1) - (\cos u, \sen u, -1)) \cdot (0, 0, 1)} {| (\cos v, \sen v, 1) - (\cos u, \sen u, -1) |} = \arccos \sqrt {\frac 2 {3 - \cos(v - u)}}.$$ El cambio a $\xi = v + u, \eta = v - u$, el cdf es $$\operatorname P(a < x) = \int_0^{2\pi} \int_\eta^{4\pi \eta} \frac 1 {(2 \pi)^2} [A < x] d\xi d\eta \desbordado * = \\ \int_0^\pi \frac 2 {(2 \pi)^2} (4\pi - 2\pi) [A < x] d\eta = \\ \frac 1 \pi \int_0^\pi [\eta \lt \arccos(3 - 2 \s^2 x)] d\eta = \\ \frac 1 \pi \arccos(3 - 2 \s^2 x),$$ donde $[\text {condition}]$ $1$ si la condición es verdadera y $0$ lo contrario. Para $*$, $f$ es simétrica alrededor de $\pi$, por lo $\int_0^{2\pi} \eta f(\eta) d\eta = 2 \pi \int_0^\pi f(\eta) d\eta$.

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