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

(四)pcl-common篇-common.h

作者: GoodTekken | 来源:发表于2022-02-18 11:28 被阅读0次
    #include<pcl/point_cloud.h>
    #include<pcl/point_types.h>
    #include<pcl/visualization/pcl_visualizer.h> //cout endl
    
    #include <pcl/common/common.h>
    
    typedef pcl::PointXYZ PointT;
    
    int main()
    {
        pcl::PointCloud<pcl::PointXYZ>::Ptr myCloud(new pcl::PointCloud<pcl::PointXYZ>);
        myCloud->points.resize(4);
        myCloud->points[0].x = 0;
        myCloud->points[0].y = 0;
        myCloud->points[0].z = 0;
    
        myCloud->points[1].x = 0;
        myCloud->points[1].y = 4;
        myCloud->points[1].z = 0;
    
        myCloud->points[2].x = 4;
        myCloud->points[2].y = 0;
        myCloud->points[2].z = 0;
    
        myCloud->points[3].x = 4;
        myCloud->points[3].y = 4;
        myCloud->points[3].z = 4;
    
    
        //(1)计算俩个向量之间的角度或者弧度
        //inline double getAngle3D(const Eigen::Vector4f & v1, const Eigen::Vector4f & v2, const bool in_degree = false);
        Eigen::Vector4f firstVector = {1,0,0,0};
        Eigen::Vector4f secondVector = { 0,1,0,0 };
        double degree = pcl::getAngle3D(firstVector, secondVector, true);//输出角度
        double radians = pcl::getAngle3D(firstVector, secondVector, false);//输出弧度
    
        //(2)计算均值和标准差
        //void pcl::getMeanStd (const std::vector< float > &values, double &mean, double &stddev)
        std::vector<float> uservector = { 1,3,5,7,9 };
        std::vector<float> uservector1 = { 5,5,5,5,5 };
        double mean, stddev;
        pcl::getMeanStd(uservector1, mean, stddev);
    
    
        //(3)得到一组点驻留在给定的边界框
        //void pcl::getPointsInBox (const pcl::PointCloud< PointT > &cloud, Eigen::Vector4f &min_pt, Eigen::Vector4f &max_pt, Indices &indices)
        Eigen::Vector4f minPoint{ 0,0,0,0 }, maxPoint{4,4,0,0};
        pcl::Indices index;
        pcl::getPointsInBox(*myCloud, minPoint, maxPoint, index);
    
        //(4)获取距离给定点最远的点
        //void  pcl::getMaxDistance (const pcl::PointCloud< PointT > &cloud, const Eigen::Vector4f &pivot_pt, Eigen::Vector4f &max_pt)
        Eigen::Vector4f pivot_pt = { 0,0,0,0 };
        Eigen::Vector4f maxPoint1;
        pcl::getMaxDistance(*myCloud, pivot_pt, maxPoint1);
    
        //(5)获取给定点云中 3 个(xyz)维度中每个维度的最小值和最大值
        //void pcl::getMinMax3D (const pcl::PointCloud<PointT> &cloud, Eigen::Vector4f &min_pt, Eigen::Vector4f &max_pt)
        Eigen::Vector4f minPoint2, maxPoint2;
        pcl::getMinMax3D(*myCloud, minPoint2, maxPoint2);
    
        //(6)计算由三个点 pa、pb 和 pc 组成的三角形的外接圆的半径
        //double pcl::getCircumcircleRadius (const PointT &pa, const PointT &pb, const PointT &pc)
        double r = pcl::getCircumcircleRadius(PointT(0, 0, 0), PointT(10, 0, 0), PointT(5, 5, 0));
    
        //(7)获取点直方图上的最小值和最大值(失败)
        //void pcl::getMinMax (const PointT &histogram, int len, float &min_p, float &max_p)
        //float min_p,max_p;
        //pcl::getMinMax(*myCloud, 4 ,min_p, max_p);
    
        //(8)给定定义多边形的点云计算多边形的面积(点的顺序很重要)
        //float pcl::calculatePolygonArea(const pcl::PointCloud< PointT > &polygon)
        float area = pcl::calculatePolygonArea(*myCloud);
    
        system("pause");
        return 0;
    }
    

    参考文章:
    https://pointclouds.org/documentation/common_2include_2pcl_2common_2common_8h.html
    https://pointclouds.org/documentation/common_2include_2pcl_2common_2common_8h_source.html

    相关文章

      网友评论

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

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