#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
网友评论