как правильно использовать эту функцию "pcl :: geometry :: squaredDistance" - PullRequest
0 голосов
/ 09 июля 2020

Как я могу получить расстояние между 2 точками в PCL? Я знаю, что в PCL есть функция pcl::geometry::squaredDistance, но когда я вызываю эту функцию, я получаю эту ошибку

/usr/include/pcl-1.7/pcl/common/geometry.h: In instantiation of ‘float pcl::geometry::squaredDistance(const PointT&, const PointT&) [with PointT = pcl::PointXYZ]’:
error: no match for ‘operator-’ (operand types are ‘const pcl::PointXYZ’ and ‘const pcl::PointXYZ’)
Eigen::Vector3f diff = p1 -p2;
                          ^

Вот код, показывающий, как я использую функцию

    pcl::PointXYZ p1(3, 4, 5);

    pcl::PointXYZ p2(0, 0, 0);

    double d = pcl::geometry::squaredDistance(p1, p2);

    std::cout << d << std::endl;

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 июля 2020

Это ошибка в PCL 1.7 (которая была исправлена ​​в связанной фиксации) .

Это простая функция, поэтому вам не нужно обновляться до более новой версии PCL:

возвращает евклидово расстояние между двумя точками

    template <typename PointT> inline float 
    distance (const PointT& p1, const PointT& p2)
    {
      Eigen::Vector3f diff = p1.getVector3fMap () - p2.getVector3fMap ();
      return (diff.norm ());
    }

возвращает квадрат евклидова расстояния между 2 точками (что быстрее вычисляется чем истинное евклидово расстояние)

    template<typename PointT> inline float 
    squaredDistance (const PointT& p1, const PointT& p2)
    {
      Eigen::Vector3f diff = p1.getVector3fMap () - p2.getVector3fMap ();
      return (diff.squaredNorm ());
    }
...