Come posso invertire l'effetto di una matrice di trasformazione?


14

Di recente ho lavorato su un gioco usando OpenGL e C ++ tramite GLFW.

Nel gioco ho un dirigibile con una torretta montata su di esso. Il dirigibile si sposta nelle coordinate spaziali del mondo e la torretta "la segue".

La torretta ha il suo spazio di coordinate per la sua direzione di sguardo / mira. Fondamentalmente, quando la torretta punta in direzione (0,0,1), mira parallela alla direzione del movimento dei dirigibili.

Per dare alla torretta un obiettivo spaziale mondiale, ho una matrice che prende le coordinate spaziali del mondo e le trasforma in coordinate spaziali della torretta.

Mentre la torretta si accende, voglio che generi i proiettili nello spazio mondiale, quindi esiste un modo elegante di usare la mia matrice di trasformazione per convertire le coordinate dello spazio della torretta nello spazio mondiale?

Un modo più generale di porre la domanda potrebbe essere: se ho una matrice Mche prende coordinate dallo spazio Aallo spazio B. C'è un modo semplice da usare Mper ottenere le coordinate da Ba A?

Risposte:


19

Finché la matrice Mè invertibile (come generalmente sarà, a meno che tu non stia facendo qualcosa di molto insolito), quindi calcolare l' inverso della matriceM ti darà una matrice che fa quello che vuoi.

Cioè, se Mesegue una trasformazione, inverse(M)esegue la trasformazione "opposta".

La maggior parte delle librerie di matrici / vettori fornisce un mezzo per calcolare l'inverso.


1
Domanda bonus (come sembri una persona che saprebbe la risposta): qualsiasi matrice di trasformazione non invertibile produrrebbe risultati visivamente interessanti?
user1306322

6
@ user1306322 Forse. Proiettare in una dimensione inferiore (ad esempio zero di tutti i valori X) sarebbe una trasformazione non invertibile, dal momento che stai gettando via i valori. È interessante nel senso che è utile, ma non che otterrai risultati funky. "Invertibilità" e "visivamente interessante" sono ortogonali.
congusbongus,

@congusbongus no! La proiezione da 3D a 2D è un hack standard per ottenere ombre sui ricevitori planari.
imallett,

@ user1306322 Potresti essere interessato allo pseudoinverso di Moore – Penrose
Tobias Kienzler,

5

Se la tua matrice di trasformazione è una matrice di rotazione, puoi semplificare il problema sfruttando il fatto che l'inverso di una matrice di rotazione è la trasposizione di quella matrice.

Se la matrice di trasformazione rappresenta una rotazione seguita da una traduzione, quindi trattare i componenti separatamente. L'inverso equivale a sottrarre la traduzione e quindi applicare la trasposizione della matrice di rotazione.


2

Nella tua matrice di matrice c'è probabilmente una funzione chiamata inversa. Questo è probabilmente quello che stai cercando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.