Bagaimana saya bisa membalikkan efek matriks transformasi?

14

Saya baru-baru ini mengerjakan game dengan menggunakan OpenGL dan C ++ melalui GLFW.

Dalam permainan, saya memiliki pesawat dengan menara yang terpasang di sana. Airship bergerak dalam koordinat ruang dunia dan turret 'mengikutinya'.

Menara ini memiliki ruang koordinat sendiri untuk arah tampilan / arahnya. Pada dasarnya, ketika turret mengarah ke arah (0,0,1), itu bertujuan sejajar dengan arah pergerakan airships.

Untuk memberi menara target ruang dunia, saya memiliki matriks yang mengambil koordinat ruang dunia dan mengubahnya menjadi koordinat ruang menara.

Saat turret menyala, saya ingin memunculkan proyektil di ruang dunia, jadi adakah cara elegan menggunakan matriks transformasi saya untuk mengubah koordinat ruang menara kembali ke ruang dunia?

Cara yang lebih umum untuk mengajukan pertanyaan mungkin: jika saya memiliki matriks Myang mengambil koordinat dari ruang Ake ruang B. Apakah ada cara mudah untuk menggunakan Muntuk mendapatkan koordinat dari Bke A?

pengguna1291510
sumber

Jawaban:

19

Selama matriks Mtidak dapat dibalik (yang umumnya akan terjadi, kecuali jika Anda melakukan sesuatu yang sangat tidak biasa), maka menghitung kebalikan dari matriksM akan memberi Anda sebuah matriks yang melakukan apa yang Anda inginkan.

Yaitu, jika Mmelakukan beberapa transformasi, inverse(M)melakukan transformasi "berlawanan".

Kebanyakan perpustakaan matriks / vektor menyediakan cara untuk menghitung invers.


sumber
1
Pertanyaan bonus (seperti Anda terlihat seperti orang yang tahu jawabannya): Apakah matriks transformasi yang tidak dapat dibalik menghasilkan hasil yang menarik secara visual?
user1306322
6
@ user1306322 Mungkin. Memproyeksikan ke dimensi yang lebih rendah (mis. Nol semua nilai X) akan menjadi transformasi yang tidak dapat dibalik, karena Anda membuang nilai. Ini menarik dalam arti bermanfaat, tetapi bukan berarti Anda akan mendapatkan hasil yang funky. "Invertibilitas" dan "menarik secara visual" adalah ortogonal.
congusbongus
@congusbongus nggak! Proyeksi dari 3D ke 2D adalah peretasan standar untuk mendapatkan drop shadow pada penerima planar.
imallett
@ user1306322 Anda mungkin tertarik pada pseudoinverse Moore – Penrose
Tobias Kienzler
5

Jika matriks transformasi Anda adalah matriks rotasi maka Anda dapat menyederhanakan masalah dengan mengambil keuntungan dari fakta bahwa kebalikan dari matriks rotasi adalah transpos dari matriks itu.

Jika matriks transformasi Anda mewakili rotasi yang diikuti oleh terjemahan, maka perlakukan komponen secara terpisah. Kebalikannya setara dengan mengurangi terjemahan dan kemudian menerapkan transpose dari matriks rotasi.

Praxeolitic
sumber
2

Dalam matriks lib Anda mungkin ada fungsi yang disebut terbalik. Mungkin itulah yang Anda cari.

pengguna55564
sumber