Как представить матрицу компактного преобразования изометрии в Eigen?

У меня есть куча изометрии [R | t] матрицы преобразования, т.е. они являются жесткими трехмерными преобразованиями. В настоящее время я храню их как собственный аффинных преобразования, представлен в компактной форме, например Eigen::AffineCompact3d который не хранит избыточную последнюю строку [0 0 0 1].

Я также знаю, что есть Eigen::Isometry3d я думаю, это typedef из Transform<double, 3, AffineCompact, Isometry>,

Я после Изометрии, поскольку обратное преобразование намного дешевле (транспонировать), чем общее аффинное обратное. Я также знаю, что могу передать подсказку, когда использую inverse () как affine_mat.inverse(Eigen::Isometry);

Но я хотел бы получить изометрическое обратное поведение без всякой ручной передачи подсказок. Другими словами, я хочу знать, как лучше всего повторить поведение Eigen::IsometryCompact3d что удивительно отсутствует в Eigen API?

5

Решение

Для представления изометрий, которые я сейчас использую крученые. Эта параметризация может быть описана 6-элементным вектором.

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]