Инвертирование аффинного преобразования - как обновить координату центра?
Итак, у меня есть 3D-изображение, которое превращается в пространство с помощью аффинного преобразования. Это преобразование состоит из традиционной матрицы 4х4 плюс центральная координата, относительно которой выполняется преобразование. Как я могу инвертировать эту центральную точку, чтобы вернуться в исходное пространство? У меня есть координаты, но это вектор 1x3 (или 3x1, в зависимости от порядка строк / столбцов). Я предполагаю, что для того, чтобы получить соответствующий центр инверсии, мне нужно превратить вектор в 1x4, но если это так, что я должен поместить в четвертую позицию? Очевидные кандидаты - 0 и 1, но я не уверен, что это правильно.
Идея состоит в том, что если я преобразую изображение в пространство, а затем инвертирую преобразование, результирующее изображение должно быть идентичным (в пределах ошибок округления / эффектов наложения от повторной выборки). Однако в данный момент я просто использую ту же самую центральную координату, и это создает изображение, которое смещено на некоторое количество, а не точно такое же изображение. Итак, как я могу преобразовать эту центральную точку?
1 ответ
Я предполагаю, что ваше преобразование идет так
x' = Mx + t
Решение для х должно дать
x = M_inv (x' - t)
Работа с матрицами 4x4 в трехмерной системе координат обычно означает работу в однородных координатах. Вы сохраняете мультипликативное значение в 4-й координате, которая обычно называется w. Значение 1 хорошо работает для позиций, значение 0 предназначено для векторов. Это связано с тем, что информация о переводе, хранящаяся в матрице M, должна влиять только на позиции (это простое объяснение, извините). Так что, да, отрицание вектора перевода уже должно помочь. Добавьте 0 в качестве 4-го компонента.