6 votos

Rotación de líneas - problema

Dado $3$ infinitas líneas $L_1$, $L_2$, $L_3$ en $R^3$ ($3D$ espacio), cada línea está representada por dos $3D$ puntos, la línea de $L_1$ está girando alrededor del eje de la línea de $L_3$ hasta que se cruza con la línea de $L_2$ (o en otras palabras, hasta que no hay un plano que $L_1$ y $L_2$ de intervalo). La rotación de una línea alrededor del eje de la línea significa que cada punto en la línea que siempre está a la misma distancia de la línea de eje.

Necesito encontrar el ángulo que $L_1$ necesidades para girar (en torno a $L_3$) en el que se cruza con la $L_2$ (o ninguno si las líneas no se cruzan). Alguien sabe cómo encontrarlo? He estado tratando de resolver esto por un buen rato.

Un par de cosas que ya he probado:
La superficie de revolución generada por la rotación de la línea de $L_1$ $L_3$ es hyperboloid (girado en el espacio). Yo estaba tratando de encontrar la ecuación de la hyperboloid (dado $L_1$$L_3$) y, a continuación, para encontrar el punto de intersección(s) entre el hyperboloid y la línea de $L_2$. Pero no tuve éxito para encontrar el hyperboloid ecuación.

También, escribí el código (en matlab) que gira una línea alrededor de la otra línea. para que yo pueda tener la ecuación de $L_1$ girado por el ángulo theta alrededor de $L_3$ (ecuación en función de una variable - theta ($\theta$)). y necesito saber para que $\theta$ hay un punto de intersección entre el$L_1$$L_2$. El problema es que la ecuación es muy largo, así que no podía continuar y buscar la teta en la que no hay un punto de intersección.

Me gustaría ser feliz para cualquier sugerencia que puede ayudar.
Muchas gracias
David

4voto

amd Puntos 2503

Bosquejo de solución: Llamar a la rotación $R$. El punto de $P$ a que $RL_1$ $L_2$ se cruzan (en todo caso), es la imagen de $RQ$ de un punto de $Q$ $L_1$ que está a la misma distancia desde el eje de rotación de la $L_3$$P$. Este problema es equivalente a encontrar $P\in L_2$ $Q\in L_1$ que equidistan de a $L_3$ y se sitúan en un plano perpendicular a él. Una forma de encontrar estos dos puntos es para parametrizar $L_1$ $L_2$ y, a continuación, utilizar las fórmulas conocidas para la distancia entre un punto y la línea en 3-D. una Vez que se tienen estos dos puntos, calcular el ángulo formado por ellos y el eje de rotación es sencillo.

Actualización: Un mejor enfoque a la búsqueda de $P$ $Q$ es para parametrizar $L_3$ $S(\lambda)=(1-\lambda)A+\lambda B$ donde $A$ $B$ son dos conveniente puntos en esta línea. A continuación encontrará $P(\lambda)$$Q(\lambda)$, las intersecciones de $L_1$$L_2$, respectivamente, con el plano perpendicular a $L_3$ a través de $S$. Solucionar $\|P-S\|=\|Q-S\|$, que puede plaza de obtener una simple ecuación cuadrática, por $\lambda$, y usted tiene los tres puntos que usted necesita para calcular el ángulo de rotación requerido. No puede ser cero, uno o dos soluciones.


Actualización (ampliando mi comentario de abajo): una Vez que tienes los puntos $P$, $Q$ y $S$, adecuado a la transformación de la matriz puede ser construido sin explícitamente computación en cualquier ángulo.

Deje $\mathbf u$ ser una unidad de vector de dirección para $L_3$ ($B-A$ normalizado va a hacer), $\mathbf v=(P-S)/\|P-S\|$$\mathbf w=(Q-S)/\|Q-S\|$. Puesto que usted no ha especificado una orientación para $L_3$, no está claro qué entiende usted por una rotación en sentido antihorario, pero digamos que significa que le gustaría que el ángulo de rotación en el rango $[0,\pi]$. Examinar el signo de la triple producto escalar $\mathbf u\cdot\mathbf v\times\mathbf w=\det\begin{bmatrix}\mathbf u&\mathbf v&\mathbf w\end{bmatrix}$. Si esta es negativa, entonces la inversa de a $\mathbf u$. Si es cero, entonces cualquiera de las $L_1$ $L_2$ ya se intersecan en $P$ o $\mathbf w=-\mathbf v$, en cuyo caso el ángulo de rotación se $\pi$ y no hay necesidad de hacer ajustes. De hecho, no es necesario realizar ningún ajuste en todos: los cambios de orientación cancelar cuando el cambio de base de las matrices se combinan a continuación, para terminar con la misma matriz de transformación de cualquier manera.

Ahora, tanto en $\mathscr B_1=(\mathbf u,\mathbf v,\mathbf u\times\mathbf v)$ $\mathscr B_2=(\mathbf u,\mathbf w,\mathbf u\times\mathbf w)$ son diestros bases ortonormales para $\mathbb R^3$. Esto significa que las matrices $$\begin{align}R_1&=\begin{bmatrix}\mathbf u&\mathbf v&\mathbf u\times\mathbf v\end{bmatrix} \\ R_2&=\begin{bmatrix}\mathbf u&\mathbf w&\mathbf u\times\mathbf w\end{bmatrix}\end{align}$$ represent rotations that map the standard basis onto $\mathscr B_1$ and $\mathscr B_2$, respectively. Therefore, the homogeneous transformation matrix that represents the rotation you're looking for is $$R=\left[\begin{array}{c|c}R_2&S\\\hline0&1\end{array}\right]\left[\begin{array}{c|c}R_1&S\\\hline0&1\end{array}\right]^{-1}.$$ You can avoid the matrix inversion by taking advantage of block structure and the fact that $R_1$ is orthogonal: $$\left[\begin{array}{c|c}R_1&S\\\hline0&1\end{array}\right]^{-1}=\left[\begin{array}{c|c}R_1^{-1}&-R_1^{-1}S\\\hline0&1\end{array}\right]=\left[\begin{array}{c|c}R_1^T&-R_1^TS\\\hline0&1\end{array}\right]$$ and multiplying it all out yields $$R=\left[\begin{array}{c|c}R_2R_1^T&(I-R_2R_1^T)S\\\hline0&1\end{array}\right].$$ Note that you may use any convenient point on the line instead of $S$ para esta parte de la construcción.

3voto

Sergio del Amo Puntos 390

Me gusta usar Desplumadora de las coordenadas de las líneas.

  • Una línea a través de dos puntos de Un y B tiene coordenadas $$ \ell_{AB} = \begin{pmatrix} {\bf r}_B - {\bf r}_A \\ {\bf r}_B \times {\bf r}_A \end{pmatrix} $$
  • Una línea a través de un punto de Un lo largo de la dirección z tiene coordenadas $$ \ell_{Az} = \begin{pmatrix} {\bf z} \\ {\bf r}_A \times {\bf z} \end{pmatrix} $$
  • Dos líneas de $\ell_1 = ({\bf e}_1, \;{\bf m}_1)$ $\ell_2 = ({\bf e}_2, \;{\bf m}_2)$ tienen un mínimo de distancia entre ellos $$ d = \frac{ | {\bf e}_1 \cdot {\bf m}_2 +{\bf e}_2 \cdot {\bf m}_1 |}{\| {\bf e}_1 \times {\bf e}_2 \|} $$
  • Una línea de $\ell_1 = ({\bf e}_1, \;{\bf m}_1)$ es de girar alrededor de un punto de Una sobre la z dirección de coordenadas $$ \ell_1' = \begin{pmatrix} {\bf e}_1' \\ {\bf m}_1' \end{pmatrix} = \begin{pmatrix} {\rm R}_z {\bf e}_1 \\ \left({\bf r}_A - {\rm R}_z {\bf r}_A\right) \times {\rm R}_z {\bf e}_1+{\rm R}_z{\bf m}_1 \end{pmatrix}$$ where ${\rm R}_z$ is the 3×3 rotation matrix about axis z with angle $\theta$. Can be defined with the Rodrigues' rotation formula. $$\begin{aligned} {\rm R}_z & = 1+\sin \theta {\bf K} + \left(1-\cos \theta\right) {\bf K}^2 \end{aligned}$$ y K el Producto Cruzado de 3×3 de la Matriz de la rotación del eje.

Su tarea es encontrar el ángulo de $\theta$ que satisface coincidencia (a partir de la fórmula de la distancia)

$$ {\bf e}_1' \cdot {\bf m}_2 + {\bf m}_1' \cdot {\bf e}_2 =0 $$

La solución de la anterior es equivalente a un 4 º de la orden de polinomio (uso $\theta = 2 \tan^{-1}(t)$ de sustitución, o $\cos \theta = \frac{1-t^2}{1+t^2}$ $\sin \theta = \frac{2 t}{1+t^2})$

1voto

David Puntos 38

Yo, finalmente, logró escribir código que resuelve el problema.
Yo no se que escribir el código de todas las posibilidades, pero funciona para la mayoría de ellos.

He aquí un bosquejo de la solución (Mi solución se basa en @amd sugerencia).

  • part1 - rotar todas las líneas (L1, L2, L3), de modo que la línea L3 (línea de eje) será el mismo que el del eje z.

  • parte2 - cambiar la representación de las líneas de Li (i=1 o 2), de manera que el punto de Li es la intersección entre la línea y Z=0. y el vector está entre los puntos de intersección de Z=0 y Z=1 (casos especiales son para líneas con z constante. Yo no cuidar de los casos). de esa manera podemos utilizar la misma forma de 't' en las líneas siguientes representaciones:
    L1: (p1x,p1y,0)+t*(v1x,v1y,1)
    L2: (p2x,p2y,0)+t*(v2x,v2y,1)
    para cada valor de t en ambas líneas se obtienen dos puntos de la misma altura (la altura es el valor de z). así queremos encontrar los valores de t en el que las distancias desde el eje z son los mismos. para estos valores de t obtenemos los puntos que se cruzan. podemos obtener 0,1 o 2 soluciones aquí.

  • parte 3 - calcular el ángulo entre los puntos calculados antes (en el mismo nivel z).

También, ya que la rotación es siempre en sentido antihorario a veces me necesitaba tomar el complemento de un ángulo de 360 grados.

Para cualquiera que quiera probar el código (matlab), he publicado aquí (incluyendo la simulación de la rotación):
https://github.com/David1324/lines_rotations

0voto

Narasimham Puntos 7596

EDIT1:

Problema interesante. No estoy seguro de si estoy haciendo las cosas más complicadas de lo necesario en la pista.

Deje $L_4$ ser perpendicular a $L_3$. Generar (encontrar ecuaciones de) dos una sábana hipérbolas de barrido alrededor de sus ejes de simetría $L_3,L_4$ barriendo recta generadores $L_1,L_2$. La intersección de estas superficies produce 3D, hiperbólicos curvas en el espacio.

A la intersección, podemos recoger el punto requerido de la $L2$ generador en una rotación particular.

wlog $L_3,L_4$ $ z-,y-$ ejes.

IntersectingHyps1sheet

Otros pueden resolver quizá más directamente usando cuaterniones.

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