美文网首页
(一)pcl-common篇-distance.h

(一)pcl-common篇-distance.h

作者: GoodTekken | 来源:发表于2022-02-17 13:55 被阅读0次
#include<pcl/point_cloud.h>
#include<pcl/point_types.h>
#include<pcl/visualization/pcl_visualizer.h> //cout endl

#include <pcl/common/distances.h>

typedef pcl::PointXYZ PointT;

int main()
{
    //(1)计算俩条异面直线的最短线段
    //line_a:前三个是坐标,后三个是向量
    Eigen::VectorXf line_a(6);
    line_a(0) = 0;
    line_a(1) = 0;
    line_a(2) = 0;

    line_a(3) = 2;
    line_a(4) = 0;
    line_a(5) = 0;
    Eigen::VectorXf line_b(6);
    line_b(0) = 0;
    line_b(1) = 0;
    line_b(2) = 3;

    line_b(3) = 0;
    line_b(4) = 2;
    line_b(5) = 0;
    Eigen::Vector4f pt1_seg;
    Eigen::Vector4f pt2_seg;
    pcl::lineToLineSegment(line_a, line_b, pt1_seg, pt2_seg);

    //(2)计算点到异面直线的距离平方,原理(平行四边形面积÷底边模长=高)
    //pt(2,0,0)为原始点
    //line_pt(0,0,0)为异面直线的出发点,line_dir(2,1,0)为异面直线的向量;
    Eigen::Vector4f pt = { 2,0,0,0 };
    Eigen::Vector4f line_pt = { 0,0,0,0 };
    Eigen::Vector4f line_dir = { 2,1,0,0 };
    auto dis = pcl::sqrPointToLineDistance(pt, line_pt, line_dir);
    cout << "点到异面直线的距离平方:"<<dis << endl;


    //(3)计算点云之间的最大距离
    pcl::PointCloud<pcl::PointXYZ>::Ptr myCloud(new pcl::PointCloud<pcl::PointXYZ>);
    myCloud->points.resize(3);
    myCloud->points[0].x = 0;
    myCloud->points[0].y = 0;
    myCloud->points[0].z = 0;

    myCloud->points[1].x = 3;
    myCloud->points[1].y = 5;
    myCloud->points[1].z = 0;

    myCloud->points[2].x = 5;
    myCloud->points[2].y = 12;
    myCloud->points[2].z = 0;

    PointT pmin, pmax;
    pcl::getMaxSegment(*myCloud, pmin, pmax);

    //(4)计算欧式距离的平方
    PointT A1 = PointT(0, 0, 0);
    PointT B1 = PointT(1, 1, 1);
    float distancePoint = pcl::squaredEuclideanDistance(A1, B1);//俩点间距离的平方
    //float distancePoint = pcl::squaredEuclideanDistance(pcl::PointXY(0, 0), pcl::PointXY(1, 1));

    //(5)计算欧式距离
    float result = pcl::euclideanDistance(A1, B1);        //两点间距离
    system("pause");
    return 0;
}

其中,点到异面直线的距离使用的是平行四边形的面积÷底边模长为高。
推导方式:
https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html

参考文章:
https://zhuanlan.zhihu.com/p/384829485
https://www.zhihu.com/column/c_1094549121628827648

相关文章

网友评论

      本文标题:(一)pcl-common篇-distance.h

      本文链接:https://www.haomeiwen.com/subject/unfslrtx.html