Comment inverser l'effet d'une matrice de transformation?

14

J'ai récemment travaillé sur un jeu utilisant OpenGL et C ++ via GLFW.

Dans le jeu, j'ai un dirigeable avec une tourelle montée dessus. Le dirigeable se déplace en coordonnées spatiales mondiales et la tourelle le «suit».

La tourelle possède son propre espace de coordonnées pour sa direction de visée / visée. Fondamentalement, lorsque la tourelle vise en direction (0,0,1), elle vise parallèlement à la direction de mouvement des dirigeables.

Pour donner à la tourelle une cible spatiale mondiale, j'ai une matrice qui prend les coordonnées spatiales mondiales et les transforme en coordonnées spatiales de la tourelle.

Alors que la tourelle tire, je veux qu'elle fasse apparaître des projectiles dans l'espace mondial, alors existe-t-il une façon élégante d'utiliser ma matrice de transformation pour convertir les coordonnées de l'espace de la tourelle en espace mondial?

Une façon plus générale de poser la question pourrait être: si j'ai une matrice Mqui prend les coordonnées d'un espace Aà l'autre B. Existe-t-il un moyen simple d’utiliser Mpour obtenir les coordonnées de Bà A?

user1291510
la source

Réponses:

19

Tant que la matrice Mest inversible (ce qui sera généralement le cas, sauf si vous faites quelque chose de très inhabituel), le calcul de l' inverse de la matriceM vous donnera une matrice qui fait ce que vous voulez.

Autrement dit, si Meffectue une transformation, inverse(M)effectue la transformation "opposée".

La plupart des bibliothèques matricielles / vectorielles fournissent un moyen de calculer l'inverse.


la source
1
Question bonus (comme vous semblez être une personne qui connaîtrait la réponse): des matrices de transformation non inversibles produiraient-elles des résultats visuellement intéressants?
user1306322
6
@ user1306322 Peut-être. La projection dans une dimension inférieure (par exemple, zéro toutes les valeurs X) serait une transformation non inversible, car vous jetez des valeurs. C'est intéressant dans le sens où c'est utile, mais pas que vous obtiendrez des résultats géniaux. "L'inversibilité" et "visuellement intéressant" sont orthogonaux.
congusbongus
@congusbongus non! La projection de la 3D à la 2D est un hack standard pour obtenir des ombres portées sur des récepteurs planaires.
imallett
@ user1306322 Vous pourriez être intéressé par le pseudoinverse Moore – Penrose
Tobias Kienzler
5

Si votre matrice de transformation est une matrice de rotation, vous pouvez simplifier le problème en profitant du fait que l'inverse d'une matrice de rotation est la transposée de cette matrice.

Si votre matrice de transformation représente une rotation suivie d'une translation, traitez les composants séparément. L'inverse équivaut à soustraire la translation puis à appliquer la transposition de la matrice de rotation.

Praxéolitique
la source
2

Dans votre lib matrice, il y a probablement une fonction appelée inverse. C'est probablement ce que vous recherchez.

user55564
la source