#include<pcl/point_cloud.h>
#include<pcl/point_types.h>
#include<pcl/visualization/pcl_visualizer.h> //cout endl
#include <pcl/common/geometry.h>
#include <Eigen/Core>
#include <math.h>
typedef pcl::PointXYZ PointT;
int main()
{
//(1)两点间的距离
//float pcl::geometry::distance (const PointT &p1, const PointT &p2)
float distance = pcl::geometry::distance(PointT(0, 0, 0), PointT(1, 2, 3));
//(2)两点间的距离的平方
//float pcl::geometry::squaredDistance (const PointT &p1, const PointT &p2)
float squaredDistance = pcl::geometry::squaredDistance(PointT(0, 0, 0), PointT(1, 2, 3));
//(3)返回投影的点(原点-法向量-投影)
//void pcl::geometry::project (const PointT &point, const PointT &plane_origin, const NormalT &plane_normal, PointT &projected)
pcl::Normal plane_normal(0,0,1);
PointT a;
//pcl::geometry::project(PointT(3, 3, 3), PointT(0, 0, 0), pcl::Normal(0,0,1), a);//失败,
//void pcl::geometry::project(const Eigen::Vector3f & point, const Eigen::Vector3f & plane_origin, const Eigen::Vector3f & plane_normal, Eigen::Vector3f & projected)
//平面的法向量长度为1时,投影点可以落在平面上{返回投影的点(原点-法向量-投影)}
Eigen::Vector3f projected;
//pcl::geometry::project(Eigen::Vector3f(3,3,3), Eigen::Vector3f(0,0,0), Eigen::Vector3f(0,0,1), projected);
pcl::geometry::project(Eigen::Vector3f(3, 3, 3), Eigen::Vector3f(0, 0, 0), Eigen::Vector3f(sqrt(3)/3, sqrt(3)/3, sqrt(3)/3), projected);
//(4)给定一个由 plane_origin 和 plane_normal 定义的平面,找到从 plane_origin 指向平面上点的投影的单位向量
//Eigen::Vector3f pcl::geometry::projectedAsUnitVector(Eigen::Vector3f const& point, Eigen::Vector3f const& plane_origin, Eigen::Vector3f const& plane_normal)
//投影是(3,3,0),从原点(0,0,0)出发到(3,3,0)的单位向量即为((根号2)/2,(根号2)/2,0)。
Eigen::Vector3f unit_vector = pcl::geometry::projectedAsUnitVector(Eigen::Vector3f(3, 3, 3), Eigen::Vector3f(0, 0, 0), Eigen::Vector3f(0,0,1));
//(5)定义一个与轴正交的随机单位向量。
//Eigen::Vector3f pcl::geometry::randomOrthogonalAxis (Eigen::Vector3f const &axis)
Eigen::Vector3f random_unit_vector = pcl::geometry::randomOrthogonalAxis(Eigen::Vector3f(0,0,1));
Eigen::Vector3f random_unit_vector1 = pcl::geometry::randomOrthogonalAxis(Eigen::Vector3f(0, 0, 1));
system("pause");
return 0;
}
参考文章:
http://pointclouds.org/documentation/common_2include_2pcl_2common_2geometry_8h.html
http://pointclouds.org/documentation/common_2include_2pcl_2common_2geometry_8h_source.html
网友评论