¿Cómo puedo revertir el efecto de una matriz de transformación?

14

Recientemente he estado trabajando en un juego con OpenGL y C ++ a través de GLFW.

En el juego tengo una aeronave con una torreta montada. La aeronave se mueve en coordenadas espaciales mundiales y la torreta 'la sigue'.

La torreta tiene su propio espacio de coordenadas para su dirección de mira / objetivo. Básicamente, cuando la torreta apunta en dirección (0,0,1), apunta paralela a la dirección de movimiento de las aeronaves.

Para darle a la torreta un objetivo espacial mundial, tengo una matriz que toma coordenadas espaciales mundiales y las transforma en coordenadas espaciales de torreta.

A medida que se dispara la torreta, quiero que genere proyectiles en el espacio mundial, entonces, ¿hay una manera elegante de usar mi matriz de transformación para convertir las coordenadas del espacio de la torreta en espacio mundial?

Una forma más general de hacer la pregunta podría ser: si tengo una matriz Mque toma coordenadas de espacio Aen espacio B. ¿Hay una manera fácil de usar Mpara obtener las coordenadas de Ba A?

usuario1291510
fuente

Respuestas:

19

Mientras la matriz Msea invertible (que generalmente lo será, a menos que esté haciendo algo muy inusual), calcular la matriz inversa de Mle dará una matriz que hace lo que desea.

Es decir, si Mrealiza alguna transformación, inverse(M)realiza la transformación "opuesta".

La mayoría de las bibliotecas de matrices / vectores proporcionan un medio para calcular el inverso.


fuente
1
Pregunta adicional (como parece una persona que sabría la respuesta): ¿Alguna matriz de transformación no invertible produciría resultados visualmente interesantes?
user1306322
66
@ user1306322 Quizás. Proyectar en una dimensión inferior (por ejemplo, cero todos los valores X) sería una transformación no invertible, ya que está descartando valores. Es interesante en el sentido de que es útil, pero no es que obtenga resultados extravagantes. "Invertibilidad" y "visualmente interesante" son ortogonales.
congusbongus
@congusbongus nope! La proyección de 3D a 2D es un truco estándar para obtener sombras paralelas en receptores planos.
imallett
@ user1306322 Quizás le interese el pseudoinverso de Moore – Penrose
Tobias Kienzler
5

Si su matriz de transformación es una matriz de rotación, entonces puede simplificar el problema aprovechando el hecho de que el inverso de una matriz de rotación es la transposición de esa matriz.

Si su matriz de transformación representa una rotación seguida de una traslación, trate los componentes por separado. El inverso es equivalente a restar la traslación y luego aplicar la transposición de la matriz de rotación.

Praxeolítico
fuente
2

En su matriz lib probablemente hay una función llamada inversa. Eso es probablemente lo que estás buscando.

usuario55564
fuente