Как сделать ротационный перевод в PCL, если у меня есть угол и ось?

Я хочу сделать перевод облака точек, в настоящее время у меня есть вектор оси и угол. Могу ли я построить матрицу автоматически, или я должен рассчитать ее вручную, как этот?

В PCL пример они используют созданный ими MAtrix 4×4, поэтому я надеюсь, что кто-то знает способ получить эту матрицу автоматически.

0

Решение

в пример данный вами уже есть более простой способ построения матрицы преобразования. Не только вращение, но и смещение (то есть перевод).

 /*  METHOD #2: Using a Affine3f
This method is easier and less error prone
*/
Eigen::Affine3f transform_2 = Eigen::Affine3f::Identity();

// Define a translation of 2.5 meters on the x axis.
transform_2.translation() << 2.5, 0.0, 0.0;

// The same rotation matrix as before; tetha radians arround Z axis
transform_2.rotate (Eigen::AngleAxisf (theta, Eigen::Vector3f::UnitZ()));
1

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

Чего не хватало в примере, так это того, что во втором параметре Eigen :: AngleAxisf мы должны добавить ось следующим образом

 //Eigen::Transform t;
Eigen::Vector3f axis(v_Ux,v_Uy,v_Uz);
Eigen::Affine3f transform_2 = Eigen::Affine3f::Identity();
// Define a translation of 2.5 meters on the x axis.
transform_2.translation() << 2.5, 0.0, 0.0;
Eigen::AngleAxis<float> rot(angle,axis);
transform_1.rotate(rot);

Я также должен был написать это в 2 строки, потому что, когда я компилировал, у меня были ошибки шаблона. Я просто добавил поплавок, и это сработало!

1

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