2013-08-23 3 views
1

Я использовал код следующим образом:преобразования из Эйгена :: Vector в Эйген :: Affine3f

Eigen::Vector4f Template_centroid; 
    pcl::compute3DCentroid(*Template,Template_centroid); 

    Eigen::Vector4f model_centroid; 
    pcl::compute3DCentroid(model.cloud,model_centroid); 

    // Transformation required to align the centroids 
    Eigen::Affine3f transform(Eigen::Affine3d::Identity()); 
    transform.translate(Template_centroid-model_centroid); 

но когда он компилирует перевод, я получил ошибку:

error: \u2018INVALID_MATRIX_PRODUCT\u2019 is not a member of \u2018Eigen::internal::static_assertion<false>\u2019 

ли кто-нибудь знать, как преобразовать или в чем причина ошибки? Благодарю.

ответ

1

transform - трехмерное аффинное преобразование, поэтому его член translate ожидает 3D-вектор, а Template_centroid-model_centroid - это 4D-векторы. Вы можете удалить последний однородный компонент (который, как я полагаю, 0), и получить 3D-вектор, используя (...).head<3>().

+0

Привет, я попробовал transform = (Template_centroid-model_centroid) .head <3>(). Но у меня все еще есть ошибка: /usr/include/eigen3/Eigen/src/Geometry/Transform.h:290:5: ошибка: неполный тип 'Eigen :: internal :: transform_construct_from_matrix , const Eigen :: Matrix , const Eigen :: Matrix >, 3, 1, false, false>, 2, 0, 3, 4, 3, 1> 'используется в вложенный идентификатор имени –

+0

вы пытаетесь преобразовать Vector3 в аффинное преобразование. Что это значит? Либо преобразуйте его в 'Translation3f', либо вызовите .translate() или непосредственно установите часть перевода с помощью access(). – ggael

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