Coordenadas globales a locales sin resolver el sistema de ecuaciones lineales

Tengo un sistema de coordenadas local dado definido por esta ecuación:

gramo = a X + b y + C z + o
X , y y z son tres vectores unitarios (perpendiculares) que definen el eje del sistema de coordenadas local (regla de la mano derecha).

o es el vector de compensación. Al observar el sistema de coordenadas global, el origen del sistema local está en o .

a , b y C son cada uno de los componentes de las coordenadas locales. Esto significa que el vector de coordenadas local sería ( a , b , C ) .

gramo es el vector de coordenadas globales correspondiente al vector de coordenadas local ( a , b , C ) . Esto hace que la conversión de coordenadas locales a coordenadas globales sea muy fácil. Mi problema es con la conversión de coordenadas globales a locales.

Puede determinar el vector de coordenadas locales ( a , b , C ) de las coordenadas globales resolviendo el siguiente sistema de ecuaciones lineales (usando el algoritmo de Gauss o algo similar):

gramo X = a X X + b y X + C z X + o X
gramo y = a X y + b y y + C z y + o y
gramo z = a X z + b y z + C z z + o z

El problema que tengo es que este cálculo debe realizarse varias veces por segundo en un microcontrolador relativamente débil. No tiene el poder de cálculo para ejecutar Gauss cada vez. ¿Hay alguna forma en que pueda calcular las coordenadas locales más fácilmente que esto (por ejemplo, calculando una matriz de transformación para este sistema de coordenadas)?

Respuestas (1)

Considere la matriz

tu = ( X X y X z X X y y y z y X z y z z z ) .

Por su suposición, ya que X , y , z son de longitud unitaria y perpendiculares, la matriz tu es unitario (entonces tu tu T = I ). La transformación de coordenadas locales a coordenadas globales viene dada por

( a b C ) ( X X y X z X X y y y z y X z y z z z ) ( a b C ) + ( o X o y o z ) = ( gramo X gramo y gramo z ) .

Entonces la transformación inversa viene dada por

( gramo X gramo y gramo z ) ( X X y X z X X y y y z y X z y z z z ) 1 ( gramo X o X gramo y o y gramo z o z ) = ( a b C ) .

Pero desde tu es unitario, lo sabes tu 1 = tu T entonces

( a b C ) = ( X X X y X z y X y y y z z X z y z z ) ( gramo X o X gramo y o y gramo z o z ) .

Eso parece muy sencillo, no sabía que una matriz de transformación se construye simplemente con vectores unitarios perpendiculares. Probaré esto e informaré con los resultados. Ah, y creo que falta un 'saber' en 'Pero ya que tu es unitario, tu que tu 1 = tu T so', pero stackexchange no me deja sugerir esa edición :D
@EmilS. Ni siquiera tienen que ser perpendiculares: las columnas de una matriz de transformación son las imágenes de los vectores base.
@EmilS.: He editado mi respuesta, gracias por el comentario.