Преобразование точки pcl типа XYZ в собственный вектор 4f

Я пытаюсь преобразовать pcl pointXYZ в собственный вектор

Eigen::Vector4f min (minPnt.x, minPnt.y, minPnt.z);  
Eigen::Vector4f max (maxPnt.x, maxPnt.y, maxPnt.z);

где minPnt и maxPnt имеют тип pcl::PointXYZ. Однако я получаю сообщение об ошибке «ошибка C2338: THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE». Не могли бы вы предложить другие подходы или сообщить мне, если мой подход неверен.


person Launa    schedule 18.05.2015    source источник


Ответы (3)


Пожалуйста, используйте getVector4fMap(), чтобы получить Eigen::Vector4f, и используйте getVector3fMap(), чтобы получить Eigen::Vector3f.

Пример:

PointT pcl_pt = ...;
Eigen::Vector3f e_v3f_pt = pcl_pt.getVector3fMap();
Eigen::Vector4f e_v4f_pt = pcl_pt.getVector4fMap();

Если у вас есть pcl::Normal, вы можете попробовать использовать getNormalVector4fMap, как показано ниже.

pcl::Normal pcl_normal(0, 0, 1);
Eigen::Vector4f eigen_normal = pcl_normal.getNormalVector4fMap();
person Ardiya    schedule 03.04.2019

Я решил вышеуказанную проблему с помощью следующего кода.

auto x_min = static_cast<float>(minPnt.x); 
auto y_min = static_cast<float>(minPnt.y); 
auto z_min = static_cast<float>(minPnt.z); 

auto x_max = static_cast<float>(maxPnt.x); 
auto y_max = static_cast<float>(maxPnt.y); 
auto z_max = static_cast<float>(maxPnt.z); 

Eigen::Vector4f min(x_min, y_min, z_min, 0.0); 
Eigen::Vector4f max(x_max, y_max, z_max, 0.0); 

Если есть лучший подход, пожалуйста, предложите.

person Launa    schedule 18.05.2015

eigen::Vector4f ищет 4 числа с плавающей запятой, но вы дали только 3 (x, y, z). попробуйте добавить 0 в конце:

Eigen::Vector4f min (minPnt.x, minPnt.y, minPnt.z, 0);  
Eigen::Vector4f max (maxPnt.x, maxPnt.y, maxPnt.z, 0);
person mobooya    schedule 19.01.2016
comment
Или 1, если вы используете координаты (x,y,z,w) - person Epic Wink; 30.05.2017