5 votos

Encontrar la rotación de 3 líneas dadas en 3D hasta la intersección con otras 3 líneas dadas

Ya he publicado una pregunta similar. pero dado que el problema sigue sin respuesta y los detalles son un poco cambiado, voy a postear de nuevo.

Estoy tratando de resolver el siguiente problema matemático:

Dados 2 conjuntos de 3 líneas cada uno en el espacio 3D (en la que cada línea está dada por una $3D$ punto y un $3D$ vector): $$ set1=\{ [(px1,py1,pz1), (vx1,vy1,vz1)], [(px2,py2,pz2),(vx2,vy2,vz2)], [(px3,py3,pz3), (vx3,vy3,vz3)] \} $$ $$ set2=\{ [(qx1,qy1,qz1), (ux1,uy1,uz1)], [(qx2,qy2,qz2),(ux2,uy2,uz2)], [(qx3,qy3,qz3), (ux3,uy3,uz3)] \} $$

find the angles of rotation $x,y,z$ (in radians) such that:

$$R=rotate\_x*rotate\_y*rotate\_z$$ $$ {rotar\_x} = \left( {\matriz{ {1} & {0} & {0} \cr {0} & {cos(x)} y {-sin(x)} \cr {0} & {sin(x)} & {cos(x)} \cr } } \right) $$ $$ {rotar\_y} = \left( {\matriz{ {cos(y)} & {0} & {sin(y)} \cr {0} & {1} & {0} \cr {-sin(y)} & {0} & {cos(y)} \cr } } \right) $$ $$ {rotar\_z} = \left( {\matriz{ {cos(z)} y {-sin(z)} & {0} \cr {sin(z)} & {cos(z)} & {0} \cr {0} & {0} & {1} \cr } } \right) $$

and if we rotate $set1$ by $R$ then all the lines in $set1$ will intersect their corresponding lines in $set2$.

Meaning, let's define $set1\_r$ as $set1$ after the above rotation.

Then line $i$ $(i=1,2,3)$ in $set1\_r$ will intersect line $i$ in $set2$.

I already built the 3 equations with 3 variables that needed to be solved. but they seem to be unsolvable.

Here are the equations (only the angles $x,y,z$ are unknown and the rest are known):

eq1 = qx1*(sin(x)*sin(z) - cos(x)*cos(z)*sin(y)) + qy1*(cos(z)*sin(x) + cos(x)*sin(y)*sin(z)) + ((ux1*(sin(x)*sin(z) - cos(x)*cos(z)*sin(y)) + uy1*(cos(z)*sin(x) + cos(x)*sin(y)*sin(z)) + uz1*cos(x)*cos(y))*(px1 - qz1*sin(y) - qx1*cos(y)*cos(z) + qy1*cos(y)*sin(z) + (vx1*(qx1*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) - py1 + qy1*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - qz1*cos(y)*sin(x) + ((ux1*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy1*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz1*cos(y)*sin(x))*(px1 - qz1*sin(y) - qx1*cos(y)*cos(z) + qy1*cos(y)*sin(z)))/(uz1*sin(y) + ux1*cos(y)*cos(z) - uy1*cos(y)*sin(z))))/(vy1 - (vx1*(ux1*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy1*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz1*cos(y)*sin(x)))/(uz1*sin(y) + ux1*cos(y)*cos(z) - uy1*cos(y)*sin(z)))))/(uz1*sin(y) + ux1*cos(y)*cos(z) - uy1*cos(y)*sin(z)) + qz1*cos(x)*cos(y) == pz1 + (vz1*(qx1*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) - py1 + qy1*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - qz1*cos(y)*sin(x) + ((ux1*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy1*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz1*cos(y)*sin(x))*(px1 - qz1*sin(y) - qx1*cos(y)*cos(z) + qy1*cos(y)*sin(z)))/(uz1*sin(y) + ux1*cos(y)*cos(z) - uy1*cos(y)*sin(z))))/(vy1 - (vx1*(ux1*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy1*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz1*cos(y)*sin(x)))/(uz1*sin(y) + ux1*cos(y)*cos(z) - uy1*cos(y)*sin(z)))
eq2 = qx2*(sin(x)*sin(z) - cos(x)*cos(z)*sin(y)) + qy2*(cos(z)*sin(x) + cos(x)*sin(y)*sin(z)) + ((ux2*(sin(x)*sin(z) - cos(x)*cos(z)*sin(y)) + uy2*(cos(z)*sin(x) + cos(x)*sin(y)*sin(z)) + uz2*cos(x)*cos(y))*(px2 - qz2*sin(y) - qx2*cos(y)*cos(z) + qy2*cos(y)*sin(z) + (vx2*(qx2*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) - py2 + qy2*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - qz2*cos(y)*sin(x) + ((ux2*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy2*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz2*cos(y)*sin(x))*(px2 - qz2*sin(y) - qx2*cos(y)*cos(z) + qy2*cos(y)*sin(z)))/(uz2*sin(y) + ux2*cos(y)*cos(z) - uy2*cos(y)*sin(z))))/(vy2 - (vx2*(ux2*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy2*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz2*cos(y)*sin(x)))/(uz2*sin(y) + ux2*cos(y)*cos(z) - uy2*cos(y)*sin(z)))))/(uz2*sin(y) + ux2*cos(y)*cos(z) - uy2*cos(y)*sin(z)) + qz2*cos(x)*cos(y) == pz2 + (vz2*(qx2*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) - py2 + qy2*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - qz2*cos(y)*sin(x) + ((ux2*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy2*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz2*cos(y)*sin(x))*(px2 - qz2*sin(y) - qx2*cos(y)*cos(z) + qy2*cos(y)*sin(z)))/(uz2*sin(y) + ux2*cos(y)*cos(z) - uy2*cos(y)*sin(z))))/(vy2 - (vx2*(ux2*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy2*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz2*cos(y)*sin(x)))/(uz2*sin(y) + ux2*cos(y)*cos(z) - uy2*cos(y)*sin(z)))
eq3 = qx3*(sin(x)*sin(z) - cos(x)*cos(z)*sin(y)) + qy3*(cos(z)*sin(x) + cos(x)*sin(y)*sin(z)) + ((ux3*(sin(x)*sin(z) - cos(x)*cos(z)*sin(y)) + uy3*(cos(z)*sin(x) + cos(x)*sin(y)*sin(z)) + uz3*cos(x)*cos(y))*(px3 - qz3*sin(y) - qx3*cos(y)*cos(z) + qy3*cos(y)*sin(z) + (vx3*(qx3*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) - py3 + qy3*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - qz3*cos(y)*sin(x) + ((ux3*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy3*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz3*cos(y)*sin(x))*(px3 - qz3*sin(y) - qx3*cos(y)*cos(z) + qy3*cos(y)*sin(z)))/(uz3*sin(y) + ux3*cos(y)*cos(z) - uy3*cos(y)*sin(z))))/(vy3 - (vx3*(ux3*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy3*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz3*cos(y)*sin(x)))/(uz3*sin(y) + ux3*cos(y)*cos(z) - uy3*cos(y)*sin(z)))))/(uz3*sin(y) + ux3*cos(y)*cos(z) - uy3*cos(y)*sin(z)) + qz3*cos(x)*cos(y) == pz3 + (vz3*(qx3*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) - py3 + qy3*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - qz3*cos(y)*sin(x) + ((ux3*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy3*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz3*cos(y)*sin(x))*(px3 - qz3*sin(y) - qx3*cos(y)*cos(z) + qy3*cos(y)*sin(z)))/(uz3*sin(y) + ux3*cos(y)*cos(z) - uy3*cos(y)*sin(z))))/(vy3 - (vx3*(ux3*(cos(x)*sin(z) + cos(z)*sin(x)*sin(y)) + uy3*(cos(x)*cos(z) - sin(x)*sin(y)*sin(z)) - uz3*cos(y)*sin(x)))/(uz3*sin(y) + ux3*cos(y)*cos(z) - uy3*cos(y)*sin(z)))

It can be seen that it's almost impossible (hopefully not impossible) to extract $x,y,z$ from the equations since there are many multiplications between $sin$ and $cos$ de los diferentes ángulos. Yo no podía resolver. y yo también lo he probado en matlab usando el 'resolver' la función pero no funcionó.

Puede alguien sugerir una solución para encontrar los ángulos $x,y,z$? o cualquier otra forma de encontrar la matriz $R$?

Si ayuda, aquí es un ejemplo específico de los 2 conjuntos de líneas en las que sé que el ángulo deseado $x,y,z$ (probablemente hay muchos más trillizos de los ángulos que también resolver el problema).

%set1
px1=0;
py1=0;
pz1=-30;

px2=0;
py2=0;
pz2=-30;

px3=0; 
py3=0;
pz3=-30;

vx1 = -0.083717247687439; 
vy1 = -0.107930827800543; 
vz1 = 0.990627255252918;

vx2 = 0.076364294519742;
vy2 = 0.060269029165473; 
vz2 = 0.995256820446840;

vx3 = -0.081460429387834; 
vy3 = 0.105021268850622; 
vz3 = 0.991128009660183; 

%set2
qx1=0; 
qy1=0;
qz1=-30;

qx2=0; 
qy2=0;
qz2=-30;

qx3=0; 
qy3=0; 
qz3=-30;

ux1 = -0.079382581863774;
uy1 = -0.095259098236529; 
uz1 = 0.992282273297173;

ux2 = 0.079382581863774; 
uy2 = 0.095259098236529; 
uz2 = 0.992282273297173;

ux3 = -0.086165283952334; 
uy3 = 0.103398340742801; 
uz3 = 0.990900765451843;

Para el ejemplo anterior, para $x=0.5236$ ($x$ es de 30 grados), $y=0, z=0$, significado, $$ {R} = \left( {\matriz{ {1} & {0} & {0} \cr {0} & {0.866} & {-0.5} \cr {0} & {0.5} & {0.866} \cr } } \right) $$

$$ $i$ ($i=1,2,3$) in $set1$ will intersect $$ $i$ in $set2$.

Also, $x=0, y=0, z=0$ ($R$ is the identity matrix) is also a solution since all the $6$ lines already intersect at the point $(0,0,-30)$.

Y estoy seguro de que hay muchas más soluciones.

Pero, por supuesto, necesito la solución general.

Espero que alguien pueda solucionarlo ya que he estado tratando de resolver por semanas :(.

Gracias

2voto

G Cab Puntos 51

Vamos a cambiar de alguna manera la notación y definir, por primera conjunto de líneas $$ \begin{array}{l} {\bf P}_{\,{\bf 1}} = \left( {\begin{array}{*{20}c} {p_{\,x,\,1} } & {p_{\,x,\,2} } & {p_{\,x,\,3} } \\ {p_{\,y,\,1} } & {p_{\,y,\,2} } & {p_{\,y,\,3} } \\ {p_{\,z,\,1} } & {p_{\,z,\,2} } & {p_{\,z,\,3} } \\ \end{array}} \right)\quad \quad {\bf V}_{\,{\bf 1}} = \left( {\begin{array}{*{20}c} {v_{\,x,\,1} } & {v_{\,x,\,2} } & {v_{\,x,\,3} } \\ {v_{\,y,\,1} } & {v_{\,y,\,2} } & {v_{\,y,\,3} } \\ {v_{\,z,\,1} } & {v_{\,z,\,2} } & {v_{\,z,\,3} } \\ \end{array}} \right) \\ {\bf \Lambda }_{\,{\bf 1}} = \left( {\begin{array}{*{20}c} {\lambda _{\,1,1} } & 0 & 0 \\ 0 & {\lambda _{\,1,2} } & 0 \\ 0 & 0 & {\lambda _{\,1,3} } \\ \end{array}} \right) \\ \end{array} $$ mientras se utiliza el índice de $2$ para el segundo set.

Dado que los valores de cada parámetro $\lambda_{1,k}$, estamos definiendo un punto en cada una de las tres líneas de la primera serie, la cual constituye un triángulo en 3D.
Mismo para el segundo conjunto de líneas. $$ {\bf T}_{\,{\bf 1}} = {\bf P}_{\,{\bf 1}} + {\bf V}_{\,{\bf 1}} \,{\bf \Lambda }_{\,{\bf 1}} \quad {\bf T}_{\,{\bf 2}} = {\bf P}_{\,{\bf 2}} + {\bf V}_{\,{\bf 2}} \,{\bf \Lambda }_{\,\,{\bf 2}} $$

Si se me ha interpretado a su pregunta correctamente, estamos a
encontrar los valores de $\lambda_{1,k}$ $\lambda_{2,k}$ de manera tal que los dos triángulos definidos en cada conjunto puede ser que se ha hecho coincidir en un rígido rotación alrededor del origen, y encontrar los parámetros de la rotación de darse cuenta de que.

Desde que usted escribió que
la línea $i$ en el conjunto 1 se intersecate de la línea de $i$ en el conjunto de 2
entonces los triángulos debe coincidir
vértice $i$ hasta el vértice $i$.

Eso significa que la pirámide $OT_2$ se rígidamente girar alrededor del vértice en $O$ y vienen a coincidir con la pirámide $OT_1$.
Y siendo la rotación rígida, entonces todas las dimensiones de la pirámide (longitudes, áreas y volumen) debe ser preservado.

Podemos traducir el anterior en las siguientes condiciones

  • la distancia desde el origen de cada vértice de $T_1$ será igual a la distancia de la correspondiente vértice de $T_2$, y
  • el ángulo entre cada par de aristas desde el origen a dos vértices de $T_1$ será igual a la correspondiente en $T_2$, y
  • (para evitar el reflejo) firmado el volumen de la pirámide $OT_1$ deberá ser igual a la de $OT_2$, cuando los vértices se enumeran en el mismo orden.

Que significa que debe estar (el que indica la transpuesta con una overline) $$ \bbox[lightyellow] { \overline {{\bf T}_{\,{\bf 1}} } \;{\bf T}_{\,{\bf 1}} = \overline {{\bf T}_{\,{\bf 2}} } \;{\bf T}_{\,{\bf 2}} } \etiqueta{1} $$ que proporciona a $6$ ecuaciones cuadráticas en la $6$ incógnitas $\lambda_{1,k}$, $\lambda_{2,j}$, y donde el signo de las soluciones (si alguna) será elegida como para dar que el determinante de ${\bf T}_{\,{\bf 1}} $ es igual a la de ${\bf T}_{\,{\bf 2}} $.

La diagonal ecuaciones proporcionan una relación entre el$\lambda_{1,k}$$\lambda_{2,k}$ ,$k=1 \cdots 3$, el tipo de $$ \lambda _{\,1,\,\,k} = a_{\,k} \pm \sqrt {b_{\,k} \,\lambda _{\,2,\,\,k} ^{\,2} + c_{\,k} \,\lambda _{\,2,\,\,k} + d_{\,k} \,} $$ La sustitución de estos valores en los tres fuera de la diagonal ecuaciones, produce ecuaciones que involucran radicales cuya solución es bastante complicada.
Pero no los puedo ver en el momento en que una mejor manera.

Una vez que el $\lambda$s ha sido determinada, una forma eficaz de encontrar la matriz de rotación podría ser la de determinar
- en primer lugar la rotación que lleva el centro de gravedad de $T_2$ a de $T_1$ (alrededor del eje normal a ambos)
- en segundo lugar, la rotación sobre el común de eje central que trae un vértice de $T_2$ sobre el correspondiente vértice de $T_1$.

1voto

Yves Daoust Puntos 30126

Escrito el paramtric ecuaciones de las líneas, con los respectivos parámetros de $r_i$$s_j$, usted tiene

$$R\,\,(\mathbb p_i+r_i\mathbb v_i)=\mathbb q_j+s_j\mathbb u_j$$ donde $i,j$ son algunos (posiblemente distinta) permutaciones de $\{0,1,2\}$ (de modo que usted tendrá que resolver el problema de seis veces).

La reescritura de

$$R\,\mathbb p_i+r_iR\,\mathbb v_i=q_j+s_j\mathbb u_j$$ and taking the cross product with $(R\,\mathbb v_i)\times\mathbb u_j$, usted puede deshacerse de los parámetros con

$$R\,\mathbb p_i\times((R\,\mathbb v_i)\times\mathbb u_j)=q_j\times((R\,\mathbb v_i)\times\mathbb u_j).$$

A continuación, utilizando la expresión de $R$,

$$R=R_x\cdot R_y\cdot R_z,$$ de obtener una desagradable sistema de nueve no lineal (trigonométrica) las ecuaciones en tres unknows.

Las ecuaciones también pueden ser emitidos en términos de los elementos de la matriz, que se limitan al expresar la orthonormality de la matriz,

$$R^TR=I.$$

Por lo tanto, usted obtiene un sistema monstruoso de quince ecuaciones cuadráticas en nueve incógnitas, que puede tener hasta a $512$ soluciones distintas, si estoy en lo cierto, y estará sujeto a las condiciones de compatibilidad.

0voto

David K Puntos 19172

Puede ser útil utilizar un poco más de intuición geométrica para orientar el análisis de las ecuaciones.

Considerar cómo podemos identificar la intersección de una línea de set 1 con una línea de 2. Cada línea tiene un punto más cercano al origen. Dividir la línea en dos medias líneas en este punto. Para cruzar un par de líneas es relativamente sencillo: elegir uno de la mitad de la línea de la línea de la serie 1, a continuación, elija una distancia $t$ a lo largo de la línea de set 2. De esta forma se selecciona un punto de $P$ sobre la línea seleccionada de 2.

Ahora gire set 1 para hacer que el seleccionado de la mitad de la línea de set 1 para pasar a través del punto seleccionado $P,$ si es posible. En orden a ello, la mitad de la línea de set 1 debe tener un punto de $Q$ a la misma distancia desde el origen como el ya seleccionado el punto de $P.$ Si lo hace, hay una rotación que lleva $Q$$P.$, De hecho, hay infinitamente muchas de estas rotaciones, uno para cada línea en el plano que pasa por el origen perpendicular a la línea de $PQ,$ pero ahora sólo tenemos que considerar la posibilidad de una rotación; llaman la rotación $R_1.$

Dada esta rotación $R_1,$ todas las otras rotaciones que tome $Q$ $P$puede ser generada por primera realización de la rotación $R_1$ y, a continuación, haciendo una rotación alrededor de la línea de $OP$ a través del origen $O$ y el punto seleccionado $P.$

Ahora, considere uno de los otros pares de líneas. Una de estas líneas, se $\ell_1,$ es en 1. La otra línea es en conjunto de 2; llamarlo $\ell_2.$ La rotación $R_1$ es de $\ell_1$ línea para una línea nueva, $R_1(\ell_1),$ la imagen de $\ell_1$ bajo $R_1.$ La línea de $R_1(\ell_1),$ bajo todas las rotaciones alrededor del eje $OP,$ barre un cono (si $R_1(\ell_1)$ pasa por el origen) o un hyperboloid. En caso de que el barrido de la superficie tiene una ecuación cuadrática y cruza la línea de $\ell_2$ en la mayoría de los dos lugares. Uno de los dos lugares será más hacia el "positivo" de la final de la $\ell_2$ (en la dirección de su vector).

Una vez que elija una de las dos intersecciones, la rotación de conjunto 1 es completamente determinado: es la composición de la $R_2\circ R_1$ de la rotación $R_1$, con lo que la rotación $R_2$ rota $R_1(\ell_1)$ sobre el seleccionado punto de intersección en $\ell_2.$ No hay más rotación es posible sin deshacer uno de los dos puntos de intersección ya seleccionada.

Mida la distancia entre el tercer par de líneas después de la rotación $R_2\circ R_1.$ Si es cero, tiene su rotación deseada.

Por supuesto, es poco probable que te iba a encontrar una solución por decisiones arbitrarias de las opciones como se describe anteriormente. Vamos a ser claros en esto: la rotación $R_2\circ R_1$ encontrado por el procedimiento anterior generalmente no ser la solución. El punto de que el procedimiento no conduce directamente a una solución.

El punto de que el procedimiento es que el primero puede decidir que la mitad de las líneas que se intersectan para el primer paso del procedimiento, que par de líneas $\ell_1$ $\ell_2$ usted se cruzan siguiente, y si usted va a rotar $R_1(\ell_1)$ sobre el "más positivo" o "menos positivo" punto de $\ell_2.$ Después de decidir esas cosas, a continuación, sólo tienes una opción más para hacer: la distancia $t$ al inicio del procedimiento. Todos los otros paso del procedimiento es completamente determinado.

Podemos considerar por tanto el procedimiento como la definición de una función de un solo parámetro $t$ a un único valor de salida $f(t),$ que representa la cantidad por la cual el procedimiento de "perder" a la tercera intersección. Esto convierte el problema en un problema de minimización de más de una variable, es decir, el problema de minimizar $f(t)$ como una función de un solo parámetro $t.$

Conceptualmente, $f(t)$ podría ser la distancia entre el tercer par de líneas después de la final de la rotación, aunque es probablemente mejor usar el cuadrado de la distancia en su lugar. Sería mejor utilizar alguna otra función. Con el fin de ayudar a resolver el problema de minimización, nos gustaría $f'(t)$ a existir y a la igualdad de cero cuando se $f(t)$ es mínimo.

Ahora si el problema original es solucionable en todo, hay una posibilidad razonable de que por el hecho de que las elecciones de la mitad de las líneas y así sucesivamente y, a continuación, minimizando $f(t),$ el mínimo podría ocurrir cuando el tercer par de líneas que se cruza. Si no funciona para estas elecciones, sin embargo, usted puede tratar de cada una de las variaciones en turno, hasta que se encuentre una solución o agotar todas las posibilidades y a la conclusión de que no hay solución.

Esto es sólo un esbozo de una solución, no incluyendo las fórmulas a utilizar. Pero creo que se reduce la complejidad del problema, reduciéndolo a unos pocos posible discretos opciones y una variable real. Mientras que las ecuaciones no sería trivial para trabajar, creo que será más sencillo que los que tienen y es probable que sean manejables para una ecuación de solver. Y si usted puede conseguir una rotación en cualquier formato, hay métodos para convertir a los tres ejes de formato que usted solicitó.

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