(四)pcl-common篇-common.h

2022-02-18  本文已影响0人  GoodTekken
#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

上一篇下一篇

猜你喜欢

热点阅读