Как я могу обратить эффект матрицы преобразования?

14

Недавно я работал над игрой с использованием OpenGL и C ++ через GLFW.

В игре у меня есть дирижабль с установленной на нем башней. Дирижабль движется в мировых космических координатах, и турель «следует» за ним.

Башня имеет свое собственное координатное пространство для направления взгляда / цели. В основном, когда турель направлена ​​в направлении (0,0,1), она направлена ​​параллельно направлению движения дирижабля.

Чтобы дать башне мировую космическую цель, у меня есть матрица, которая берет мировые космические координаты и преобразует их в космические координаты башни.

Поскольку турель стреляет, я хочу, чтобы она порождала снаряды в мировом пространстве, так есть ли элегантный способ использования моей матрицы преобразования для преобразования координат башни в мировое пространство?

Более общий способ задать вопрос может быть: если у меня есть матрица, Mкоторая принимает координаты из космоса Aв космос B. Есть ли простой способ Mполучить координаты от Bдо A?

user1291510
источник

Ответы:

19

До тех пор , как матрица Mявляется обратимой (который обычно будет, если вы делаете что - то очень необычное), то вычисление обратной матрицы из Mдаст вам матрицу , которая делает то , что вы хотите.

То есть, если Mвыполняет какое-то преобразование, inverse(M)выполняет «противоположное» преобразование.

Большинство библиотек матриц / векторов предоставляют средства для вычисления обратного.


источник
1
Дополнительный вопрос (как вам кажется, человек, который знает ответ): могут ли какие-нибудь необратимые матрицы преобразования дать визуально интересные результаты?
user1306322
6
@ user1306322 Возможно. Проецирование в более низкое измерение (например, обнуление всех значений X) будет необратимым преобразованием, поскольку вы отбрасываете значения. Это интересно в том смысле, что это полезно, но не так, что вы получите интересные результаты. «Обратимость» и «визуально интересный» являются ортогональными.
congusbongus
@congusbongus Нету! Проецирование из 3D в 2D является стандартным способом получения теней на плоских приемниках.
Ималлетт
@ user1306322 Вас может заинтересовать псевдообращение Мура – ​​Пенроуза
Тобиас Кинцлер,
5

Если ваша матрица преобразования является матрицей вращения, то вы можете упростить задачу, воспользовавшись тем, что обратная матрица вращения является транспонированием этой матрицы.

Если ваша матрица преобразования представляет вращение с последующим переводом, то обрабатывайте компоненты отдельно. Обратное эквивалентно вычитанию перевода и затем применению транспонирования матрицы вращения.

Praxeolitic
источник
2

В вашей матричной библиотеке, вероятно, есть функция с именем inverse. Это, вероятно, то, что вы ищете.

user55564
источник