У меня есть куча изометрии [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?
Для представления изометрий, которые я сейчас использую крученые. Эта параметризация может быть описана 6-элементным вектором.
Для преобразования туда и обратно к стандартной однородной матричной формулировке вам понадобится пара функций, основанных на log () и exp () (таким образом, преобразование будет медленной операцией).
Это решение полезно, если у вас нет ограничения производительности при переходе между двумя формулировками (или вы делаете это редко), или если вы хотите использовать свойства завихрений (например, в числовой оптимизации)
Других решений пока нет …