1 votos

Rotación más corta del vector alrededor del cono

Estoy buscando la rotación más corta que transforme un vector 3D de la dirección inicial a la final, sorteando un cono determinado.

Visualización de los conos B y G y de los vectores v1 y v2.

Más concretamente:

Dada:

  • Cono B(lue): definido por su eje de simetría $\vec{v}_B$ y su ángulo de medio cono $\alpha_B$ .
  • Dos vectores de dirección: dirección inicial $\vec{v}_1$ y la dirección final $\vec{v}_2$ (gris). Los orígenes de los vectores y del cono B son los mismos.

Se busca:

  • Cono G(reen): definido por el eje $\vec{v}_G$ y el ángulo del medio cono $\alpha_G$ . Este cono representa el eje de rotación más corto entre $\vec{v}_1$ y $\vec{v}_2$ alrededor del Cono B(lue).

Enfoque actual:

  • el eje $\vec{v}_G$ debe estar en un plano $P$ con normalidad $\vec{n}=\vec{v}_2-\vec{v}_1$ que pasa por el origen. Esto deja un único grado de libertad para $\vec{v}_G$
  • el ángulo $\alpha_G = \sphericalangle(\vec{v}_G,\vec{v}_1) = \sphericalangle(\vec{v}_G,\vec{v}_2)$ debe ser igual a $\sphericalangle(\vec{v}_G,\vec{v}_B)$ + $\alpha_B$

Con estos resultados debería ser posible determinar $\vec{v}_G$ para el camino más corto. ¿Pero cómo? Hasta ahora no he podido encontrar una solución explícita. ¿Alguien tiene una buena idea?

1voto

amd Puntos 2503

N.B.: Esta respuesta sólo contempla el caso $v_1\cdot v_B, v_2\cdot v_B\gt0$ . Hay una solución completa aquí Pero voy a dejar esta respuesta preliminar porque ya ha sido aceptada.

WLOG, sitúe el vértice del cono azul en el origen y gire para que su eje sea el $z$ -eje. La ecuación del cono es entonces $x^2+y^2=z^2\tan^2\alpha_B$ , donde $\alpha_B$ es el ángulo de media apertura. También será conveniente expresarlo en forma de matriz: $$\mathbf x^TQ\mathbf x = \begin{bmatrix}x&y&z\end{bmatrix}\begin{bmatrix}1&0&0 \\ 0&1&0 \\ 0&0&-\tan^2\alpha_B \end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=0.\tag1$$

Suponiendo que por "rotación más corta" se entienda el menor ángulo de rotación, entonces sin el cono de obstrucción esto se consigue cuando el eje de rotación es perpendicular a $\mathbf v_1$ y $\mathbf v_2$ . Lo primero que hay que hacer es determinar si es necesario o no ajustar este eje. Si el plano de rotación sólo se cruza con el cono en su vértice, no es necesario ningún ajuste. Un punto $\mathbf p$ es exterior al cono azul si $\mathbf p^TQ\mathbf p\gt0$ por lo que es necesario ajustar el eje de rotación cuando $(\mathbf v_1\times\mathbf v_2)^TQ(\mathbf v_1\times\mathbf v_2)\gt0$ .

Para que el vector de rotación "sólo roce" el cono azul, el cono definido por $\mathbf v_1$ y el eje de rotación debe ser tangente al obstáculo. El vector de rotación traza parte de un círculo centrado en el eje de rotación, y la condición de tangencia es equivalente al máximo $z$ -La coordenada de este círculo es igual a $\|\mathbf v_1\|\sin\alpha_B$ es decir, el $z$ -que corresponde a una altura de inclinación de $\|\mathbf v_1\|$ . Esta condición, a su vez, equivale a que el plano de rotación intersecte al círculo $x^2+y^2=\|v_1\|^2\sin^2\alpha_B$ , $z=\|v_1\|\cos\alpha_B$ en exactamente un punto.

El eje de rotación se encuentra en el plano que biseca el ángulo formado por $\mathbf v_1$ y $\mathbf v_2$ . Es fácil comprobar que si $\mathbf v_1$ y $\mathbf v_2$ no son paralelos, entonces $\mathbf v_1\times\mathbf v_2$ y $\mathbf v_1+\mathbf v_2$ ambos se alinean en este plano y, además, son ortogonales. Por lo tanto, $$\mathbf v_G={\mathbf v_1\times\mathbf v_2\over\|\mathbf v_1\times\mathbf v_2\|}\cos\theta + {\mathbf v_1+\mathbf v_2\over\|\mathbf v_1+\mathbf v_2\|}\sin\theta\tag2$$ es una parametrización de los ejes de rotación en la que el parámetro $\theta$ mide el desplazamiento angular respecto al eje perpendicular "ideal". El plano de rotación puede representarse entonces por el vector homogéneo $\mathbf p=\begin{bmatrix}\mathbf v_G^T \mid -\mathbf v_G^T\mathbf v_1\end{bmatrix}$ (los componentes de $\mathbf p$ son los coeficientes de la forma punto-normal de la ecuación del plano).

Si $\mathbf v_1$ y $\mathbf v_2$ son paralelos, entonces $\mathbf v_1=\mathbf v_2$ en cuyo caso no hay nada que hacer, o $\mathbf v_1=-\mathbf v_2$ . En este último caso, $\mathbf v_1$ es normal al plano bisectriz (aunque se puede elegir $\mathbf v_2$ debido a la orientación), y un par de vectores unitarios ortogonales en el plano para la parametrización de $\mathbf p$ se puede encontrar a través de una variedad de técnicas conocidas (ver esta pregunta para algunos).

El círculo que será intersecado por $\mathbf p$ se encuentra en el plano $z=\|\mathbf v_1\|\cos\alpha_B$ por lo que basta con examinar la línea de intersección de $\mathbf p$ con este avión. La proyección de esta línea sobre el $x$ - $y$ se obtiene fijando $z=\|\mathbf v_1\|\cos\alpha_B$ que puede expresarse en forma de matriz como $$\mathbf l=M\mathbf p=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&\|\mathbf v_1\|\cos\alpha_B&1\end{bmatrix}\begin{bmatrix}\mathbf v_G\\-\mathbf v_G^T\mathbf v_1\end{bmatrix}.\tag3$$ La condición de que esta línea sea tangente al círculo $x^2+y^2=\|\mathbf v_1\|^2\sin^2\alpha_B$ puede expresarse mediante la ecuación $\mathbf l^TC^*\mathbf l=0$ , donde $$C^*=\begin{bmatrix}\|\mathbf v_1\|^2\sin^2\alpha_B&0&0\\0&\|\mathbf v_1\|^2\sin^2\alpha_B&0\\0&0&-1\end{bmatrix}\tag4$$ es la matriz de la cónica dual al círculo. Una vez que se multiplica todo esto, se obtiene una forma cuadrática en $\cos\theta$ y $\sin\theta$ que luego se puede resolver numéricamente para $\theta$ . En general, habrá cuatro soluciones que produzcan dos pares de vectores de puntas opuestas cuando se sustituyan en la ecuación (2). Todavía tendrás que determinar cuál de estos dos ejes da lugar al menor ángulo de rotación, pero ese es un cálculo bastante sencillo.

Por ejemplo, dejemos que $\alpha_B=\pi/6$ , $\mathbf v_1=(1,1,2)^T$ y $\mathbf v_2=(-2,-1,1)^T$ . Entonces tenemos $Q=\operatorname{diag}(1,1,-1/3)$ . Calculamos $(\mathbf v_1\times\mathbf v_2)^TQ(\mathbf v_1\times\mathbf v_2)=\frac{101}3$ por lo que es necesario ajustar el eje de rotación. Introduciendo estos valores en las ecuaciones anteriores, encontramos que $$\mathbf v_G=\left(\frac{3 \cos\theta}{\sqrt{35}}-\frac{\sin\theta}{\sqrt{10}},-\sqrt{\frac{5}{7}} \cos\theta,\frac{3 \sin \theta}{\sqrt{10}}+\frac{\cos\theta}{\sqrt{35}}\right) \\ \mathbf v_G^T\mathbf v_1 = \sqrt{\frac52}\sin\theta$$ y por lo tanto debe resolver $$\frac{1}{70} \left(93 \cos ^2\theta+\sin\theta \left(7 \left(45 \sqrt{2}-64\right) \sin\theta-6 \sqrt{7} \left(6 \sqrt{2}-5\right) \cos\theta\right)\right)=0.$$ Según Mathematica, las soluciones de esta ecuación son aproximadamente $\theta=1.00328$ , $\theta=1.61332$ , $\theta=4.14487$ y $\theta=4.75492$ . Esto da los siguientes ejes de rotación potenciales: $\pm(0.00592596, -0.454303, 0.890828)^T$ y $\pm(-0.337501, 0.0359312, 0.940639)^T$ . Si graficas los conos resultantes, verás que efectivamente son tangentes al cono azul de bloqueo.


Es probable que haya pasado por alto alguna idea geométrica inteligente que simplificaría aún más los cálculos. Por ejemplo, la ecuación que resulta de expandir $\mathbf l^TC^*\mathbf l=0$ puede reescribirse como una ecuación lineal en $\sin2\theta$ y $\cos2\theta$ lo que convierte el problema en uno de cálculo de la intersección de una recta con el círculo unitario. Además, una de las cónicas resultantes de la refactorización de las expresiones matriciales anteriores representa un par de líneas que se cruzan, y de nuevo el problema se convierte en uno de encontrar la intersección de estas líneas con el círculo unitario. Este tipo de cosas me hace sospechar que se pueden encontrar relaciones geométricas útiles.

1voto

amd Puntos 2503

[Publicado como una respuesta separada ya que mi anterior ya ha sido aceptada].

A veces me resulta más fácil generar varias soluciones potenciales y luego reducirlas en lugar de intentar calcular directamente la solución correcta. Las pruebas que se realizan para descartar posibles soluciones pueden ser más sencillas que el análisis de casos que se requiere para acotar las cosas desde el principio. Este es el enfoque que adoptaré para este problema.

Asumo que ya has determinado que hay que hacer un ajuste en el eje de rotación, así que sólo me ocuparé de encontrar esa rotación ajustada. La tarea consiste en encontrar un eje (y un ángulo) de rotación tal que el vector de rotación sólo roce el cono azul de bloqueo y el ángulo de rotación sea mínimo entre todos esos ejes. De forma equivalente, buscamos un plano de rotación tal que el arco circular trazado en ese plano por el vector de rotación intersecte el cono exactamente en un punto. Para que esto ocurra, el vector debe ser paralelo a la generatriz del cono en ese punto. WLOG, que el vértice del cono esté en el origen y su eje el $z$ -eje. Una condición equivalente a la anterior es que el plano de rotación sea tangente a la intersección del cono con uno de los planos $z=\pm\|\vec v_1\|\cos\alpha_B$ un círculo de radio $\|\vec v_1\|\sin\alpha_B$ . Si consideramos sólo el plano de la circunferencia, el problema se reduce al bien estudiado de encontrar las intersecciones de las tangentes a esta circunferencia a través del punto común de intersección $p$ de los planos de rotación y el plano del círculo. Una forma sencilla de calcular estos puntos es encontrar la intersección del círculo con $p$ de la línea polar. Al elevar estas intersecciones a 3D se obtienen hasta cuatro puntos de roce candidatos, de los cuales se puede seleccionar el que da lugar a la mínima rotación.

Estos problemas de intersección pueden resolverse de varias maneras. Voy a describir un procedimiento que calcula los puntos directamente. Este procedimiento salta de un lado a otro entre espacios bidimensionales y tridimensionales y también cambia entre coordenadas cartesianas y homogéneas, así que un poco de notación para ayudar a mantener las cosas claras: letras minúsculas en negrita como $\mathbf p$ denotan vectores columna de coordenadas homogéneas en $\mathbb{RP}^2$ y las mayúsculas $\mathbf P$ denota lo mismo para $\mathbb{RP}^3$ . En ambos casos, una tilde ( $\tilde{\mathbf p}$ , $\tilde{\mathbf P}$ ) indica coordenadas no homogéneas (cartesianas). También me permitiré un pequeño abuso de notación al mostrar dos tuplas homogéneas como iguales cuando representan el mismo objeto, cuando en realidad sólo son equivalentes. Para reducir un poco el desorden, dejemos que $v=\|\vec v_1\|=\|\vec v_2\|$ .

Tenemos $\tilde{\mathbf V}_1=[x_1,y_1,z_1]^T$ y $\tilde{\mathbf V}_2=[x_2,y_2,z_2]^T$ . El plano del círculo superior es $$\mathbf\Pi_+=[0,0,1,-v\cos\alpha_B]^T.$$ La intersección de este plano con la línea que pasa por $\mathbf V_1$ y $\mathbf V_2$ se encuentra fácilmente a través de la matriz de Plücker $\mathscr L(\mathbf V_1,\mathbf V_2)=\mathbf V_1\mathbf V_2^T-\mathbf V_2\mathbf V_1^T$ de la línea: es simplemente $\mathbf P_+=\mathscr L(\mathbf V_1,\mathbf V_2)\mathbf\Pi_+$ . Este será un punto en el infinito si $z_1=z_2$ pero el resto del cálculo también se ocupa de este caso.

Proyecto $\mathbf P_+$ en el $x$ - $y$ plano dejando caer su tercera coordenada. Más concretamente, calcula $\mathbf p_+=\mathscr H\mathbf P_+$ , donde $$\mathscr H=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\end{bmatrix}.$$ The circle has matrix $C=\operatorname{diag}(1,1,-v^2\sin^2\alpha_B)$, and the polar line to $\mathbf p_+$ is $\mathbf l_+=C\mathbf p_+$. Putting this cascade all together and simplifying produces the point $$\mathbf p_+=\mathscr H\mathscr L(\mathbf V_1,\mathbf V_2)\mathbf\Pi_+ = \begin{bmatrix} x_1z_2-x_2z_1-(x_1-x_2)v\cos\alpha_B \\ y_1z_2-y_2z_1-(y_1-y_2)v\cos\alpha_B \\z_2-z_1\end{bmatrix}$$ y la línea $$\mathbf l_+ = C\mathbf p_+ = \begin{bmatrix} x_1z_2-z_1x_2-(x_1-x_2)v\cos\alpha_B \\ y_1z_2-z_1y_2-(y_1-y_2)v\cos\alpha_B \\ (z_1-z_2)v^2\sin^2\alpha_B \end{bmatrix}.\tag1$$ Se presenta aquí sin pruebas† una fórmula general para la(s) intersección(es) de la recta $[\lambda,\mu,\nu]^T$ con un círculo de radio $r$ centrado en el origen: $$\begin{bmatrix}-\lambda\nu\pm\mu\sqrt{r^2(\lambda^2+\mu^2)-\nu^2} \\ -\mu\nu\mp\lambda\sqrt{r^2(\lambda^2+\mu^2)-\nu^2} \\ \lambda^2+\mu^2 \end{bmatrix}.\tag2$$ Si prefieres trabajar con la pértiga $\mathbf p_+$ en cambio, la fórmula de las intersecciones de las tangentes por un punto $[x,y,w]^T$ y un círculo de radio $r$ es bastante similar: $$\begin{bmatrix} r^2xw\pm ry\sqrt{x^2+y^2-r^2w^2} \\ r^2yw\mp rx\sqrt{x^2+y^2-r^2w^2} \\ x^2+y^2 \end{bmatrix}.$$ (La similitud de estas dos fórmulas no es casual. De hecho, están relacionadas por la relación polo/polar $[\lambda,\mu,\nu]^T=[x,y,-r^2w]^T$ del punto y la línea).

Levantar cada punto tangente $\mathbf g=[x_g,y_g,w_g]^T$ volver a 3-D. Es mejor convertir a coordenadas cartesianas ahora porque el siguiente paso utilizará exclusivamente coordenadas cartesianas, por lo que esta transformación es $$[x_g,y_g,w_g]^T\mapsto\left[\frac{x_g}{w_g},\frac{y_g}{w_g},v\cos\alpha_B\right]^T.$$ (Si $w_g=0$ uno de los puntos extremos de la rotación es interior al cono, por lo que no es posible la solución). Repite el algoritmo de intersección para el plano $z=-v\cos\alpha$ . Si utilizas las fórmulas anteriores, una forma un poco furtiva de conseguirlo es darle la vuelta al signo de $v$ .

Ahora tienes un conjunto de hasta cuatro puntos de pastoreo $\tilde{\mathbf G}_i$ a partir de la cual se debe seleccionar la rotación mínima. A medida que el plano de rotación se aleja del eje ideal $\tilde{\mathbf A}_0=\tilde{\mathbf V}_1\times\tilde{\mathbf V}_2$ el ángulo de rotación aumenta, pero el radio del arco de rotación disminuye. Afortunadamente, el ángulo gana, por lo que tanto el ángulo de rotación como la longitud del arco son funciones crecientes del ángulo entre el eje de rotación y $\tilde{\mathbf A}_0$ . Queremos que la orientación del eje de rotación capture el hecho de que $\tilde{\mathbf G}_i$ también se encuentra en el arco de rotación, por lo que se establece $\tilde{\mathbf A}_i=(\tilde{\mathbf G}_i-\tilde{\mathbf V}_1)\times(\tilde{\mathbf V}_2-\tilde{\mathbf G}_i)$ normalizado. Si es cero, significa que el punto de roce es uno de los dos puntos finales de la rotación. Ya sabes que la rotación con ese punto de rozamiento no es buena -por eso estás haciendo todo esto en primer lugar- así que descarta ese punto. Efectivamente, la rotación tendrá que dar "la vuelta larga". Por último, calcula $\tilde{\mathbf A}_0^T\tilde{\mathbf A}_i$ para cada uno de los puntos supervivientes y seleccionar el que maximiza este valor.

El cálculo anterior puede adaptarse fácilmente a un cono en posición general, aunque no estoy seguro de que merezca la pena la complejidad extra: Los planos $\mathbf\Pi_+$ y $\mathbf\Pi_-$ sólo tiene que utilizar $\tilde{\mathbf V}_B$ normalizado, en lugar de $[0,0,1]^T$ pero todavía tendrá que trasladar implícitamente el vértice al origen para calcular los ejes de rotación, y ambos $\mathscr H$ y el impulso de vuelta a las 3-D implicará una rotación. Me parece mucho más fácil transformar $\mathbf V_1$ y $\mathbf V_2$ y luego transformar de nuevo una vez que haya encontrado el nuevo eje de rotación.


† Derivé estas fórmulas utilizando el procedimiento para calcular la intersección de una recta y una cónica descrito en la obra de Richter-Gebert Perspectivas de la geometría proyectiva una variante de la cual se describe aquí . El algoritmo del libro es un cálculo directo que no requiere resolver ninguna ecuación.


Por ejemplo, dejemos que $\alpha=\pi/6$ , $\vec v_1=(1,1,2)$ y $\vec v_2=(-2,-1,-1)$ . Introduciendo estos valores en la fórmula (1) se obtiene $\mathbf l_+\approx[-3.36396, -3.24264, 4.5]^T$ y la fórmula (2) da como resultado $\mathbf g_1\approx[3.675, 26.4836, 21.831]^T$ , $\mathbf g_2\approx[26.6007, 2.70018, 21.831]^T$ . Repitiendo esto para el plano inferior se obtiene $\mathbf g_3\approx[22.6048, -139.23, 115.169]^T$ y $\mathbf g_4\approx[-106.88, 92.0459, 115.169]^T$ . Convirtiendo a cartesiana y elevando a 3D se obtienen los cuatro puntos de roce $$\tilde{\mathbf G}_1\approx[0.168339, 1.21312, 2.12132]^T \\ \tilde{\mathbf G}_2\approx[1.21848, 0.123686, 2.12132]^T \\ \tilde{\mathbf G}_3\approx[0.196275, -1.20892, -2.12132]^T \\ \tilde{\mathbf G}_4\approx[-0.928031, 0.799224, -2.12132]^T.$$ Los productos de puntos de los ejes correspondientes son $3.22549$ , $0.31171$ , $-5.79138$ y $-5.38299$ respectivamente, por lo que la mejor es la primera. Los resultados de este cálculo se ilustran a continuación.

enter image description here

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