У меня есть несколько преобразований в Eigen, в виде переводов (Eigen::Vector3f
) и поворотов (Eigen::Quaternionf
). Я хотел бы объединить все эти преобразования в порядке моего выбора в матрицу преобразования 4x4 Eigen::Matrix4f
.Объединение множественных преобразований в Eigen в одну матрицу преобразования
Например, я хотел бы применить следующие преобразования в порядке А, В, С, D, E:
Eigen::Vector3f translation_A;
Eigen::Quaternionf rotation_B;
Eigen::Quaternionf rotation_C;
Eigen::Quaternionf rotation_D;
Eigen::Vector3f translation_E;
Что это самый простой способ достижения этой цели? Я до сих пор их применения индивидуальны для моих окончательных данных так:
pcl::transformPointCloud(*cloud_in, *cloud_out, translation_A, IDENTITY_QUATERNION);
pcl::transformPointCloud(*cloud_out, *cloud_out, ZERO_TRANSLATION, rotation_B);
pcl::transformPointCloud(*cloud_out, *cloud_out, ZERO_TRANSLATION, rotation_C);
pcl::transformPointCloud(*cloud_out, *cloud_out, ZERO_TRANSLATION, rotation_D);
pcl::transformPointCloud(*cloud_out, *cloud_out, translation_E, IDENTITY_QUATERNION);
... но должна быть простым (встроенным?) Способом объединения этих преобразований с использованием Эйгена, в окончательную трансформацию 4x4 матрица.
Спасибо, я попробовал это, но это не дало того же результата, что и применение каждого отдельно. По прихоти я попытался изменить порядок умножений в «комбинированном» продукте, и это дало правильный результат ... Является ли это тем, как работают преобразования Eigen? Начиная со спины? –
@BillCheatham Да, они работают «математически». Я обновлю свой ответ, чтобы показать вам, как это сделать. – us2012
Да, это имеет смысл. Думаю, упорядочение преобразований может быть немного сложным. Благодарю. –