1

Я не могу понять, как установить преобразование т в функции:Облако точек Библиотека: Как использовать PCL :: addCoordinateSystem (двойная шкала, Const Эйген :: Affine3f & т, INT видовых = 0))

pcl::addCoordinateSystem(double scale, const Eigen::Affine3f & t, int viewport = 0))

Вопрос: как я могу определить Eigen::Affine3f?

У меня есть матрица вращения и вектор трансляции.

ответ

1

Познав матрицу поворота и сдвига, можно объединить их в Affine3f.

Eigen::Affine3f tt; 
tt = Eigen::Translation3f(100.,300.,0.) * Eigen::AngleAxis<float>(theta,axis); 

Обратите внимание, что Eigen::Translation3f и Eigen::AngleAxis3f не матрицам здесь, но абстрактного типа Transform.

+0

Вы правы! – Michele

1

Если у вас есть вращение и перемещение в отдельных объектов вы можете сделать:

Affine3f t; 
t.linear() = ...; 
t.translation() = ...; 

или:

t.fromPositionRotationScale(pos, rot, Vector3f::Ones()); 
+0

Хорошо, спасибо, я был заблокирован из-за парсера kdevelop и автоматического завершения, который не дал мне имена Affine3f и методы объекта, но только желтые предупреждения :(Но когда я компилирую и запускаю, все в порядке! – Michele

+0

С это, перевод работает отлично, но не вращение – mkuse

+0

Что вы подразумеваете под вращением, не работает? Метод 'fromPositionRotationScale' строит трансформационные« T »точки преобразования из локального пространства (т. е. переведенного/повернутого) в мир пространство (т. е. определено пространство внутри позиции и ориентации). – ggael

Смежные вопросы