Как разложить аффинную матрицу?

У меня есть серия точек в двух 3D-системах. С ними я использую np.linalg.lstsq для вычисления матрицы аффинного преобразования (4x4) между ними. Однако из-за моего проекта мне пришлось «отключить» сдвиг в преобразовании. Есть ли способ разложить матрицу на базовые преобразования? Я узнал, как это сделать для Переноса и Масштабирования, но я не знаю, как разделить Вращение и Сдвиг. Если нет, есть ли способ вычислить матрицу преобразования по точкам, которые не включают сдвиг? Я могу использовать только numpy или tensorflow для решения этой проблемы, кстати.


person Felipe Moser    schedule 16.08.2018    source источник
comment
Это больше похоже на вопрос механики сплошной среды, чем на вопрос программирования.   -  person Daniel F    schedule 16.08.2018
comment
Вам нужно использовать для этого numpy или tensorflow? Иногда проще просто посчитать самостоятельно, и, в конечном итоге, в конечном итоге, вероятно, это поможет вам лучше в долгосрочной перспективе. math.stackexchange.com/questions/612006/   -  person AdaRaider    schedule 16.08.2018


Ответы (1)


Я не уверен, что понимаю, о чем вы спрашиваете.

В любом случае, если у вас есть два набора трехмерных точек P и Q, вы можете использовать алгоритм Кабша, чтобы найти матрицу вращения R и вектор перемещения T, чтобы сумма квадратов расстояний между (RP + T) и Q была минимальной. Вы, конечно, можете объединить R и T в матрицу 4x4 (только вращения и перемещения без сдвига или масштаба).

person David    schedule 16.08.2018
comment
Спасибо за ответ. Что мне нужно, так это найти наиболее близкое преобразование от P к Q, используя только перенос, поворот и масштабирование, то есть без сдвига. Мне нужно вычислить матрицу преобразования подобия из точек - person Felipe Moser; 16.08.2018
comment
Вы можете посмотреть здесь: stackoverflow.com/questions/13432805/ Они объясняют, как расширить алгоритм Кабша, включив в него также масштабирование. В любом случае в окончательной матрице преобразования нет сдвига. - person David; 16.08.2018
comment
Спасибо за это, Дэвид! Я нашел здесь перевод этой статьи на языке Python: gist.github.com/CarloNicolini/7118015 - person Felipe Moser; 16.08.2018
comment
Здорово! Рад, что помог тебе! - person David; 16.08.2018