Transformar de un sistema de coordenadas global a uno local

tengo un avión en R 3 , definido por un vector de dirección

norte = norte X , norte y , norte z
y un punto C ( X 1 , Y 1 , Z 1 ) . La dirección del vector unitario normal norte se describe a partir de la altitud del avión y los ángulos de acimut α , A respectivamente como:
norte = porque ( α ) pecado ( A ) , porque ( α ) porque ( A ) , pecado ( α ) .
asumir un punto PAG ( X PAG , Y PAG , Z PAG ) que se encuentra en el plano (por ejemplo, punto de intersección entre una línea y un plano).

¿Cómo puedo convertir el punto? PAG ( X PAG , Y PAG , Z PAG ) del sistema de coordenadas global al sistema de coordenadas local del plano y finalmente obtener pag ( X pag , y pag , 0 ) ?

Todo en mayúsculas X , Y , Z consulte el sistema de coordenadas global.

Todo en minúsculas X , y , z al sistema de coordenadas local del plano.

En caso de que le importe, las fórmulas en mi respuesta dan un conjunto de coordenadas planas, no el conjunto de coordenadas planas. (No existe una elección única de coordenadas planas). Estas fórmulas son numéricamente inestables para planos cuyo vector normal está cerca de ± ( 0 , 0 , 1 ) ; por razones topológicas, no hay forma de evitar este problema por completo.
@ user86418 Gracias por la aclaración.

Respuestas (1)

Si norte = ± 0 , 0 , 1 , entonces Z PAG = 0 y su punto ya está en la forma deseada.

De lo contrario, tu 1 = porque ( A ) , pecado ( A ) , 0 y tu 2 = norte × tu 1 = pecado ( α ) pecado ( A ) , pecado ( α ) porque ( A ) , porque ( α ) son una base ortonormal para su plano, y

X PAG = ( PAG C ) tu 1 = ( X PAG X 1 ) porque ( A ) + ( Y PAG Y 1 ) pecado ( A ) , y PAG = ( PAG C ) tu 2 = ( X PAG X 1 ) pecado ( α ) pecado ( A ) ( Y PAG Y 1 ) pecado ( α ) porque ( A ) + ( Z PAG Z 1 ) porque ( α ) .

¡Muchas gracias! Estoy probando un caso: tube.geogebra.org/student/m1110279 Plano desde: Punto: C = ( 4 , 2 , 1 ) Vector normal: H = 0.12 , 0.24 , 0.86 Punto A en el plano: A = ( 2.67 , 1.51 , 0,95 ) calculo: a = a r C s i norte ( H 2 ) = 1.03 A = { 2 π H 1 C o s ( a ) , si un  <  0 H 1 C o s ( a ) , si un   0 = 4.22 tu 1 = 0.47 , 0.88 , 0 , tu 2 = 0.76 , 0.4 , 0.22 Y por ultimo: X mi = 6.12 , y mi = 3.63 Pero mi = 7.22 C mi = 7.54 ¿Me equivoqué en algo?
@T81: Parece que su H no es un vector unitario. (Para arreglar esto, divida H por H . :) Posiblemente como resultado, tu 1 y tu 2 no son vectores unitarios. (Con tu 1 el problema puede ser un error de redondeo, pero tu 2 0.8866 .) En realidad, su tu 1 y tu 2 tampoco son ortogonales...
Supuse que conocías la altitud y el acimut de tu avión. :) En lugar de usar funciones trigonométricas inversas: Si norte = ( a , b , C ) es un vector unitario, entonces
tu 1 = ( b , a , 0 ) a 2 + b 2 , tu 2 = norte × tu 1 = ( C a , C b , a 2 + b 2 ) a 2 + b 2 .
Entonces usa X PAG = ( PAG C ) tu 1 y y PAG = ( PAG C ) tu 2 .
¡Excelente! En efecto H no era un vector unitario. Cuando convertí y procedí con las funciones de activación inversa o usando la recomendación anterior, obtuve X mi = 7.54 , y mi = 0.16 y mi = 7.54 . En realidad, prefiero evitar las funciones trigonométricas inversas. ¡Gracias de nuevo! :)
Por si quiero el resultado X mi = 7.54 , y mi = + 0.16 puedo ir: tu 1 = ( b , a , 0 ) a 2 + b 2 ?
@T81: "Sí". :) (Con más detalle, multiplicando tu 1 por 1 también multiplica tu 2 = norte × tu 1 por 1 , lo que cambia los signos de ambas coordenadas.)